Thank you Krzysztof, in fact this was my approach before post the question. Sadly IA has a bunch of methods, so I've decided to cook a "sauce of reflection" in a interceptor. Is very complex because some methods are generics methods.
I will attach a test to the issue DYNPROXY-ISSUE-96. Thank you again. Krzysztof Koźmic (2) escribió: > Hmmm, > > This is uncool. > I guess in this case you have to fallback to my first suggestion with > specialized interceptor, or set of interceptors plus interceptor > selector. > Then you'd do this: > //given IA has a method public int Foo(string bar); > > var target = (invocation.Proxy as > IProxyTargetAccessor).DynProxyGetTarget(); > var bar = invocation.GetArgumentValue(0) as string; > var result = target.Foo(bar); > invocation.ReturnValue = result; > > On the bright side, I already did some work on this issue, so although > it is much larger than I anticipated, I think I should make it work in > a matter of few days. > It is also on our roadmap for v2.2 so this version will include the > fix as well. > > Krzysztof > > > > On Jul 6, 2:38 pm, "José F. Romaniello" <[email protected]> > wrote: > >> Thank you Krzysztof!! I read all your post about dynproxy. >> I will generate a test case. >> >> This solution doesn't work for me : >> >> var target = (invocation.Proxy as IProxyTargetAccessor).DynProxyGetTarget(); >> (invocation as IChangeProxyTarget).ChangeInvocationTarget(target); >> invocation.Proceed(); >> >> It give me a System.InvalidCastException cannot convert from "ObjectA" >> to "IC". >> (remember, ObjectA only implements IA) >> >> Krzysztof Kozmic escribió: >> >> >>> José, >>> >>> As for the additional interceptor, use it to switch the target of >>> invocation to proxy target instead of proxy itself. >>> >>> var target = (invocation.Proxy as >>> IProxyTargetAccessor).DynProxyGetTarget(); >>> (invocation as IChangeProxyTarget).ChangeInvocationTarget(target); >>> invocation.Proceed(); >>> >>> this should set you up until we get a proper fix for that. >>> >>> Krzysztof >>> >>> On Jul 6, 8:08 am, Krzysztof Koźmic <[email protected]> >>> wrote: >>> >>>> José, >>>> >>>> I only have a brief moment, so I can't verify the actual behavior, but >>>> here's what I *think* it may be. >>>> >>>> It looks like the fact that IC implements IA takes precedense over the >>>> fact that you're implementing proxy for IA in the first place, so the >>>> proxy treats IA as an additional interface, instead of target interface. >>>> The fact that you get proxy as a target is explained >>>> here:http://kozmic.pl/archive/2009/07/01/castle-dynamic-proxy-tutorial-par... >>>> >>>> My workaround would be to insert additional interceptor that would take >>>> the target of proxy (invocation.Proxy as >>>> IProxyTargetAccessor).GetProxyTarget() and invoke method directly. >>>> >>>> It seems like it's part of a larger >>>> bug:http://support.castleproject.org/projects/DYNPROXY/issues/view/DYNPRO... >>>> >>>> Please create a testcase and attach it to the issue. >>>> >>>> Krzysztof >>>> >>>> José F. Romaniello pisze: >>>> >>>>> I want a proxy with a target of the following scenrario: >>>>> >>>>> I have three interfaces : >>>>> -IA >>>>> -IB >>>>> -IC : IA, IB --> (IC inherit IA and IB) >>>>> >>>>> The target is an implementation of "IA" and I want the proxy implements >>>>> IC and IB of course. >>>>> >>>>> proxyGenerator.CreateInterfaceProxyWithTargetInterface(typeof(IA), >>>>> new[] { typeof(IC) }, >>>>> //Aditional interfaces. >>>>> anInstanceImplementingIA, options, >>>>> new[] { new SampleInterceptor() }); >>>>> >>>>> The problem; If I do it in this way calls to members of "IA" never >>>>> reached the target. >>>>> The InvocationTarget of those members is the Proxy, instead >>>>> "anInstanceImplementingIA". >>>>> >>>>> Thanks. >>>>> >> > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
