2010-08-26 84 views
4

我正在使用Microsoft Unity 2.0,并且拦截扩展未按预期工作。Microsoft Unity:使用BuildUp代替Resolve时拦截不起作用

考虑的这两行代码:

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

这两条线没有得到你你所期望的someObject动态代理!如何为这种情况制作截取工作?

+0

同样的问题适用于统一1.2 – Falcon 2010-08-26 12:10:33

回答

4

This page解释说,当在创建对象(由于目标对象的子类是动态生成的),则可以不使用BuildUp使用虚拟拦截,因为它只能应用于:

截取仅发生在虚拟 方法。您必须在对象创建时设置拦截 ,并且不能 拦截现有对象。

+0

有没有什么办法来拦截现有的物质而不使它们可复制?也许是一个自定义对象创建器? – Falcon 2010-08-26 12:32:07

0

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

我可以看到可能会添加一个VirtualMethodProxyInterceptor,但我认为它会造成比帮助更多的困惑。