Unity是微软P&P部门开发的一个轻量级IoC框架,通过Interception机制可以实现基于三种拦截机制的AOP。不过Unity仅仅提供“显式”拦截机制,以致我们为了注册可被拦截的类型会多写很多代码和配置。本篇文章通过UnityContainer的扩展提供了一种“自动”拦截机制。
我们通过一个简单的实例演示Unity原生支持的显式拦截机制和我们通过扩展实现的自动拦截机制。我们定了如下一个简单的SimpleCallHandler,在Invoke方法中通过在控制台打印一段文字用以证明应用在某个类型上的CallHandler被执行了。
class SimpleCallHandler : ICallHandler
2: {
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
4: {
, input.Target.GetType().Name);
return getNext()(input, getNext);
7: }
int Order { get; set; }
9: }
class SimpleCallHandlerAttribute : HandlerAttribute
11: {
override ICallHandler CreateHandler(IUnityContainer container)
13: {
this.Order };
15: }
16: }