Hm i don't understand this. In  the interceptor i don't want to know
anything about additional interfaces. And as far as i can see, i'm not able
to bring in the target object, if i use CreateClassProxy. If i try to Add it
as Mixin, an exception it thrown because the
proxy and the mixing are both implementing the same interface. But anyway, i
did it now simply with

CreateInterfaceProxyWithTargetInterface(typeof(ITask),
i_pTask.GetType().GetInterfaces().*Where(x => !(x ==
typeof(ITask))).ToArray()*, i_pTask,

new ProxyGenerationOptions(), new TaskInterceptor()) as ITask;

So the *shouldfind_* test are running with success now, becaus the doStart()
method has no duplicates. But the problem with the endless
loop is still there...


2009/6/27 Ayende Rahien <[email protected]>

> You need to keep track of the mixin interfaces in the interceptor, you can
> do that since you create both of them at the same time
>
>
> On Sat, Jun 27, 2009 at 11:36 AM, Belvasis <[email protected]>wrote:
>
>> Yes I know, but i have no other possibility in my current case. As i wrote
>> in another thread, if there where something
>> like *CreateClassProxyWithTarget* i had no need for this. This means
>> creating a proxy for an existing object
>> without the knowledge of specific interfaces:
>>
>> Task pTask = TaskRegistry.createTask(pTask);
>>
>> ...
>> clas TaskRegistry
>> {
>>    Task createTask(Task i_pTask)
>>    {
>>       return CreateClassProxyWithTarget(i_pTask.GetType(),...);
>>    }
>> }
>>
>> So i could intercept all methodes decorated with specific attributes etc.
>>
>> 2009/6/27 Ayende Rahien <[email protected]>
>>
>> You are supposed to handle mixin interfaces differently
>>>
>>>
>>> On Fri, Jun 26, 2009 at 12:59 AM, Belvasis 
>>> <[email protected]>wrote:
>>>
>>>> So, finally i created some tests.  With the *shouldfind_method* test
>>>> i'm not sure if it is a bug or not.
>>>> The problem here is that the proxy has two methods with the same name
>>>> and signature. This is logic since
>>>> in the tested case one interface is given twice to the ProxyGenerator.
>>>> I'm just wondering why this doesn't result
>>>> in an exception. With the real case the problem is, it is not startable
>>>> with NUnit, Gallio etc. They both crashed.
>>>> Hope you can find something...
>>>>
>>>>
>>>> 2009/6/25 Belvasis <[email protected]>
>>>>
>>>> Yes i'll do it later this evening, i'm on travel right now
>>>>>
>>>>> Regards
>>>>>
>>>>> Am 25.06.2009 um 16:45 schrieb Ayende Rahien <[email protected]>:
>>>>>
>>>>> That most definitely should not.Can you create a test case?
>>>>>
>>>>> On Thu, Jun 25, 2009 at 5:41 PM, Belvasis < <http://belvasis.de>
>>>>> belvasis.de@ <http://googlemail.com>googlemail.com> wrote:
>>>>>
>>>>>> Now i'm confused ;) Did you think i called the MethodInfo.Invoke from
>>>>>> inside the intercepto? No, no i didn't. That this results in an endless 
>>>>>> loop
>>>>>> is clear. I did simply:
>>>>>> Obj = CreateInterfacProxyWithTarget
>>>>>> pMethod.Invoke(obj...)
>>>>>>
>>>>>> And Inside the interceptor:
>>>>>>
>>>>>> ...
>>>>>> If( check(...))
>>>>>>   invocation.proceed()
>>>>>>
>>>>>> This leads to a StackOverflow...
>>>>>>
>>>>>> Am 25.06.2009 um 16:09 schrieb Ayende Rahien < <[email protected]>
>>>>>> [email protected]>:
>>>>>>
>>>>>> It _is_, from the OUTSIDE.You are calling this from the intereceptor!
>>>>>>
>>>>>> On Thu, Jun 25, 2009 at 5:03 PM, Belvasis < 
>>>>>> <http://belvasis.de><http://belvasis.de>
>>>>>> belvasis.de@ <http://googlemail.com> <http://googlemail.com>
>>>>>> googlemail.com> wrote:
>>>>>>
>>>>>>> No thats not what i want or need :( I thought it would be completely
>>>>>>> transparent for the user of the object if it i proxied or not. This is 
>>>>>>> true
>>>>>>> if you work with the public signature of the object, but not if you use
>>>>>>> reflection as far as i can see.  I wanted the developer to call 
>>>>>>> something
>>>>>>> like TaskRegistry.invokeTask("taskDef"). In the end this builds a 
>>>>>>> stateless
>>>>>>> Task object. Every method of the Task can be decorated with an
>>>>>>> TaskImplementor("taskDef") Attribute and those methods should be 
>>>>>>> intercepted
>>>>>>> to check availability, permission etc., if the are invoked. So i have 
>>>>>>> to use
>>>>>>> reflection for it. Maybe i have to think about other ways to do this.
>>>>>>>
>>>>>>> Regards
>>>>>>>
>>>>>>>
>>>>>>> Am 25.06.2009 um 10:01 schrieb Ayende Rahien < 
>>>>>>> <[email protected]><[email protected]>
>>>>>>> [email protected]>:
>>>>>>>
>>>>>>> Yes, that is what you want, no?
>>>>>>>
>>>>>>> On Thu, Jun 25, 2009 at 10:50 AM, Belvasis < 
>>>>>>> <http://belvasis.de><http://belvasis.de><http://belvasis.de>
>>>>>>> belvasis.de@ <http://googlemail.com> 
>>>>>>> <http://googlemail.com><http://googlemail.com>
>>>>>>> googlemail.com> wrote:
>>>>>>>
>>>>>>>> But if i invoke the method on the DynProxyGetTarget() - object it
>>>>>>>> bypasses the interceptor, or do Ido something wrong? On the other hand
>>>>>>>> what you say means, you have alwys to know if an object is a proxy
>>>>>>>> or not. Is this wanted?
>>>>>>>>
>>>>>>>> Thanks and regards
>>>>>>>>
>>>>>>>> Am 25.06.2009 um 02:01 schrieb Ayende Rahien < 
>>>>>>>> <[email protected]><[email protected]><[email protected]>
>>>>>>>> [email protected]>:
>>>>>>>>
>>>>>>>> That is the expected behavior.Invoking a method using Invoke will
>>>>>>>> mean that you get back to the interceptor.
>>>>>>>> The workaround you specified is how this should work.
>>>>>>>>
>>>>>>>> On Thu, Jun 25, 2009 at 2:55 AM, Belvasis < 
>>>>>>>> <http://belvasis.de><http://belvasis.de><http://belvasis.de><http://belvasis.de>
>>>>>>>> belvasis.de@ <http://googlemail.com> 
>>>>>>>> <http://googlemail.com><http://googlemail.com><http://googlemail.com>
>>>>>>>> googlemail.com> wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> >
>>>>>>>>>
>>>>>>>>> > Hi,
>>>>>>>>> > I have the following problem:
>>>>>>>>> > I want to invoke a method on a proxy
>>>>>>>>> > using MethodInfo.Invoke(...). The method should be intercepted,
>>>>>>>>> if the
>>>>>>>>> > InterceptorSelector decided to do so.
>>>>>>>>> > The problem is, that the Interceptor.Intercept method is called
>>>>>>>>> in
>>>>>>>>> > an endless loop, if invocation.Proceed is called Inside the
>>>>>>>>> > interceptor. Anyone an idea why this happend? If i invoke the
>>>>>>>>> > corresponding MethodInfo of the DynProxyGetTarget() - object, it
>>>>>>>>> > works as expected.
>>>>>>>>> >
>>>>>>>>> > Thanks
>>>>>>>>> > Belvasis
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>
> >
>

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