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
-~----------~----~----~----~------~----~------~--~---

Reply via email to