Search code examples
inversion-of-controlcastle-windsorcastlecastle-dynamicproxy

[Castle.DynamicProxy]The created proxy object does not have properties of original object set correctly


I'm new here and hope my first question does not confuse anyone.

I am using Castle Windsor and Castle DynamicProxy together, in order to integrate AOP with IOC, so that I can implement a logging service (and auditing, etc.) with will intercept all services in my project.

I'm trying to proxy the resolved instance to get this done but with no luck. Because the proxy returned will have the properties of the resolved instance set to null. Following is the debugging info for reference (the PROBLEMATIC property is TimeService).

the resolved instance before proxied

The resolved instance before proxied.

the proxied object

The proxied object

Did I miss something or did i understand Castle DynamicProxy in a wrong way? I did search for any solutions but had no luck.

Any answers is highly appreciated. Thanks in advance.


Solution

  • You should use Windsor's built-in support for AOP during registration, not overriding WindsorContainer.Resolve otherwise you'll also run into other problems around releasing components and container lifetimes:

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

    See the docs for more info: https://github.com/castleproject/Windsor/blob/master/docs/registering-interceptors-and-proxyoptions.md