[Castle.DynamicProxy]创建的代理对象没有正确设置原始对象的属性

问题描述:

我是新来的人,希望我的第一个问题不会混淆任何人。[Castle.DynamicProxy]创建的代理对象没有正确设置原始对象的属性

我将Castle Windsor和Castle DynamicProxy一起使用,以便将AOP与IOC集成在一起,以便我可以实施日志记录服务(以及审计等),并拦截项目中的所有服务。

我试图代理已解决的实例来完成这件事,但没有运气。因为返回的代理将已解析实例的属性设置为空。以下是参考的调试信息(PROBLEMATIC属性是TimeService)。

the resolved instance before proxied

的解决实例之前代理。

the proxied object

代理对象

我错过了什么或者我才明白城堡DynamicProxy以错误的方式?我确实在寻找任何解决方案,但没有运气。

任何答案是高度赞赏。提前致谢。

你应该使用温莎的内置登记,不重写WindsorContainer.Resolve否则你还会碰到其他问题围绕释放组件和容器寿命期间AOP支持:

container.Register(
    Component.For<ICalcService>() 
     .Interceptors(InterceptorReference.ForType<ReturnDefaultInterceptor>()).Last, 
    Component.For<ReturnDefaultInterceptor>() 
); 

详情参见文档: https://github.com/castleproject/Windsor/blob/master/docs/registering-interceptors-and-proxyoptions.md

+0

非常感谢您的回答,这个工程的me.One更多的问题,似乎这种解决方案需要为每个组件拦截器配置(无论是在代码或配置文件),在那里,你可以指定某种全球性的方式拦截器自动适用于所有的th e组件? –

+0

@SkyFeng如果您没有使用约定驱动注册(例如Classes.FromAssemblyContaining()),则使用hook容器。 ComponentRegistered并添加到ComponentModel.Interceptors。 –

+0

明白了。非常感谢。 @ jonathon-rossi –