Microsoft Unity:使用BuildUp而不是Resolve时拦截不起作用

时间:2010-08-26 11:11:01

标签: c# unity-container unity-interception

我使用的是Microsoft Unity 2.0,拦截扩展程序没有按预期工作。

考虑以下两行代码:

MyUnityContainer.Configure<Interception>().SetDefaultInterceptorFor<MyType>(new VirtualMethodInterceptor());
var someObject = MyUnityContainer.BuildUp<MyType>(anObject);

这两行没有为您提供某些对象所期望的动态代理!如何针对这种情况进行拦截工作?

2 个答案:

答案 0 :(得分:4)

This page解释说您不能使用BuildUp进行虚拟拦截,因为它只能在创建对象时应用(因为目标对象的子类是动态生成的):

  

拦截只发生在虚拟上   方法。你必须设置拦截   在对象创建时,不能   拦截现有对象。

答案 1 :(得分:0)

VirtualMethodInterceptor仅适用于新对象。您可以使用Interface或TransparentProxy拦截器来拦截现有实例(因为它们使用显式代理对象)。

我可以看到可能会添加一个VirtualMethodProxyInterceptor,但我认为这只会引起更多的困惑而不是帮助。