Question

So I ran into this issue with the Windsor bootstrapper for Nancy. I managed to whip together a small test project where I can reproduce what is going wrong. You can find the project here.

What seems to go wrong is this: DynamicProxy only seems to catch the invocation of the void Handle(Action<string> oncomplete) method and not the string Handle(string input) method that is called on another thread. As if the Engine is no longer proxied after it had been sent to another thread. Scratch that: It's just the call to another method on the same class that is not proxied.

This means the output of the program is only

Handled Handle with return type System.Void
test

and not

Handled Handle with return type System.Void
Handled Handle with return type System.String
test

Is this the expected behaviour of Dynamic Proxy? That proxies on another thread are not longer, well, proxied? Or is there something wrong with the code?

EDIT: Just RTFM'd Dynamic Proxy, and it seems like it Works As Intended. Now how do I configure my IEngine Instance to use the correct kind of Proxy?

Was it helpful?

Solution

Try changing :

Component.For<MyEngine>().Forward<IEngine>().Interceptors<ScopeInterceptor>());

into

Component.For<MyEngine>().Forward<IEngine>().Forward<MyEngine>().Interceptors<ScopeInterceptor>());

I don't have the time to actually try it but this should force windsor into creating a class proxy, which should solve your issue

Kind regards, Marwijn.

-- edit --

for the current link try replacing :

Component.For<IEngine>().ImplementedBy<Engine>()

with:

Component.For<IEngine, Engine>().ImplementedBy<Engine>()
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top