Belvasis,DP will direct all calls to the extension interfaces to the interceptor. You cannot call Proceed on those methods. You need to recognize and detect them.
On Sat, Jun 27, 2009 at 6:15 PM, Belvasis <[email protected]>wrote: > 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 -~----------~----~----~----~------~----~------~--~---
