Thi*_*uda 5 .net c# castle-windsor inversion-of-control interceptor
让我们考虑一些情况:
_windsor.Register(Component.For<IProductServices>().ImplementedBy<ProductServices>().Interceptors(typeof(SomeInterceptorType));
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当我要求一个IProductServices时,windsor将代理接口拦截接口方法调用.如果相反,我这样做:
_windsor.Register(Component.For<ProductServices>().Interceptors(typeof(SomeInterceptorType));
Run Code Online (Sandbox Code Playgroud)
然后我不能要求windsor解析IProductServices,而是要求ProductServices,它将返回一个动态子类,它将拦截虚方法调用.当然动态子类仍然实现'IProductServices'
我的问题是:我可以像第一种情况一样注册接口组件,并像第二种情况一样获取子类代理吗?
我想
要这样做有两个原因:1 - 因为要解析的代码无法了解ProductServices类,只能了解IProductServices接口.2 - 因为一些将发送方作为参数传递的事件调用将传递ProductServices对象,并且在第一种情况下,此对象是动态代理上的字段,而不是windsor返回的真实对象.让我举一个如何使事情复杂化的例子:假设我有一个自定义集合,当它们的项目通知属性更改时会执行某些操作:
private void ItemChanged(object sender, PropertyChangedEventArgs e)
{
int senderIndex = IndexOf(sender);
SomeActionOnItemIndex(senderIndex);
}
Run Code Online (Sandbox Code Playgroud)
如果我添加了接口代理,此代码将失败,因为发送方将是接口代理中的字段,而IndexOf(发送方)将返回-1.
是的你可以:
_windsor.Register(Component.For<ProductServices, IProductServices>()
.Interceptors(typeof(SomeInterceptorType));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |