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

时间:2017-07-10 03:39:45

标签: inversion-of-control castle-windsor castle castle-dynamicproxy

我是新来的,希望我的第一个问题不会让任何人感到困惑。

我正在使用Castle Windsor和Castle DynamicProxy,以便将AOP与IOC集成,这样我就可以实现日志服务(以及审计等),并拦截我项目中的所有服务。

我正在尝试代理已解析的实例以完成此操作,但没有运气。因为返回的代理将已解析实例的属性设置为null。以下是参考的调试信息(PROBLEMATIC属性是TimeService)。

the resolved instance before proxied

代理之前解析的实例。

the proxied object

代理对象

我错过了什么或者我是否以错误的方式理解Castle DynamicProxy?我确实搜索过任何解决方案,但没有运气。

任何答案都非常感谢。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您应该在注册期间使用Windsor对AOP的内置支持,而不是覆盖WindsorContainer.Resolve,否则您还会遇到有关释放组件和容器生命周期的其他问题:

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