Unity提供了针对类型属性的拦截规则PropertyMatchingRule类型。它的属性名称匹配通配符规则和MemberNameMatchingRule等类型相同。它可以指定拦截getter、setter或者同时拦截。看一个简单的示例:
1 public class MyObject2 2 { 3 public virtual String ID { get; set; } 4 5 public virtual String Name { get; set; } 6 } 7 8 public sealed class Log4NetHandler : ICallHandler 9 {10 #region ICallHandler Members11 12 public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)13 {14 Console.WriteLine(input.MethodBase.Name);15 16 return getNext()(input, getNext);17 }18 19 public Int32 Order { get; set; }20 21 #endregion22 }23 24 IUnityContainer unityContainer = new UnityContainer();25 26 unityContainer.LoadConfiguration();27 unityContainer.Configure()28 .AddPolicy(“PropertyMatchingRule”)29 .AddMatchingRule(new PropertyMatchingRule(“Name”, PropertyMatchingOption.Set))30 .AddCallHandler ();31 unityContainer.RegisterType (32 new Interceptor (),33 new InterceptionBehavior ()34 );35 36 MyObject2 myObject2 = unityContainer.Resolve ();37 38 myObject2.Name = “aaa”;39 40 Console.WriteLine(myObject2.Name);
上面的示例只有调用Name属性的setter才会被拦截。配置文件定义如下: