Hi,

I redid the implementation to use proxyGenerationOptions's Selector

the patch with new version is in donjon: 
http://support.castleproject.org/projects/DYNPROXY/issues/view/DYNPROXY-ISSUE-37

Here's Reflector's C# view of sample method from one of tests.

public override int 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Int32>
 *Do 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7/Do%28%29:Int32>*()
{
    if (this.tokenCache1_interceptors 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7/tokenCache1_interceptors:Castle.Core.Interceptor.IInterceptor%5b%5d>
 == null)
    {
        this.tokenCache1_interceptors 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7/tokenCache1_interceptors:Castle.Core.Interceptor.IInterceptor%5b%5d>
 = proxyGenerationOptions 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7/proxyGenerationOptions:Castle.DynamicProxy.ProxyGenerationOptions>.Selector
 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://Castle.DynamicProxy:2.0.3.0:407dd0808d44fbdc/Castle.DynamicProxy.ProxyGenerationOptions/property:Selector:Castle.DynamicProxy.IInterceptorSelector>.SelectInterceptors
 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://Castle.DynamicProxy:2.0.3.0:407dd0808d44fbdc/Castle.DynamicProxy.IInterceptorSelector/SelectInterceptors%28System.Type,System.Reflection.MethodInfo,Castle.Core.Interceptor.IInterceptor%5b%5d%29:Castle.Core.Interceptor.IInterceptor%5b%5d>(typeTokenCache
 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7/typeTokenCache:System.Type>,
 tokenCache1 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7/tokenCache1:System.Reflection.MethodInfo>,
 this.__interceptors 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7/__interceptors:Castle.Core.Interceptor.IInterceptor%5b%5d>);
    }
    if (this.tokenCache1_interceptors 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7/tokenCache1_interceptors:Castle.Core.Interceptor.IInterceptor%5b%5d>
 == null)
    {
        this.tokenCache1_interceptors 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7/tokenCache1_interceptors:Castle.Core.Interceptor.IInterceptor%5b%5d>
 = new IInterceptor 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://Castle.Core:1.0.3.0:407dd0808d44fbdc/Castle.Core.Interceptor.IInterceptor>[0];
    }
    if (this.tokenCache1_interceptors 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7/tokenCache1_interceptors:Castle.Core.Interceptor.IInterceptor%5b%5d>.Length
 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Array/property:Length:Int32>
 == 0)
    {
        return base.Do 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://Castle.DynamicProxy.Tests:1.1.0.0:407dd0808d44fbdc/Castle.DynamicProxy.Tests.InterceptorSelector.SimpleClass/Do%28%29:Int32>();
    }
    object 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Object>[]
 *objArray* = new object 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Object>[0];
    InvocationDo_1 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7.InvocationDo_1>
 *o_* = new InvocationDo_1 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7.InvocationDo_1/.ctor%28SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7,Castle.Core.Interceptor.IInterceptor%5b%5d,System.Type,System.Reflection.MethodInfo,Object%5b%5d,Object%29>(this,
 this.tokenCache1_interceptors 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7/tokenCache1_interceptors:Castle.Core.Interceptor.IInterceptor%5b%5d>,
 typeTokenCache 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7/typeTokenCache:System.Type>,
 tokenCache1 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://DynamicProxyGenAssembly2::a621a9e7e5c32e69/SimpleClassProxy063fd4cf3b3b4b25ac6f78d1abc0e5f7/tokenCache1:System.Reflection.MethodInfo>,
 objArray, this);
    o_.Proceed 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://Castle.DynamicProxy:2.0.3.0:407dd0808d44fbdc/Castle.DynamicProxy.AbstractInvocation/Proceed%28%29>();
    return (int 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Int32>)
 o_.ReturnValue 
<http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://Castle.DynamicProxy:2.0.3.0:407dd0808d44fbdc/Castle.DynamicProxy.AbstractInvocation/property:ReturnValue:Object>;
}
      


Cheers,
Krzysztof

Fabian Schmied pisze:
>> You can't do that.
>> Simple reason is, that you don't get access to interceptors while generating 
>> proxy type, ergo you can't call selector on them, ergo it has to be done at 
>> runtime.
>>     
>
> Hm, that's true. Let's see what Hammett says.
>
> Fabian
>
> >
>
>   


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Castle Project Development List" 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-devel?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to