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