could you please provide some reference on writing a helper method in
the installer? by installer do you mean application package? thanks

On Aug 10, 3:15 pm, Krzysztof Koźmic <[email protected]>
wrote:
>   Yes and no.
>
> Yes there's no OOTB dedicated hook in the container for this.
> No, you don't have to specify that manually for each and every
> component. Like I said before you can write a helper method in your
> installer that will do it, or build a ComponentModel construction
> contributor, although I'd rather suggest going with helper method.
>
> Krzysztof
>
> On 10/08/2010 3:10 PM,PBwrote:
>
>
>
> > So you mean if I have 50 classes that I want to provide same logger,
> > I’ll have to explicitly register the same interceptor and hook for
> > every class
>
> > container.Register(Component.For<LogInterceptor>(),
> > Component.For<LoggingProxyGenerationHook>(),
> > Component.For<ILogger>().ImplementedBy<Logger>(),
> > Component.For<IFoo>().ImplementedBy<Foo>().Interceptors<LogInterceptor>().P­¬roxy.Hook(
> > h =>  h.Service<LoggingProxyGenerationHook>()),
> > Component.For<IMath>().ImplementedBy<Math>().Interceptors<LogInterceptor>()­.
> > Proxy.Hook(h =>  h.Service<LoggingProxyGenerationHook>()),
> > Component.For<ICar>().ImplementedBy<Car>().Interceptors<LogInterceptor>().
> > Proxy.Hook(h =>  h.Service<LoggingProxyGenerationHook>())
> > );
>
> > Can’t we configure the container to use the interceptor for all the
> > classes that get resolved by the container? Wouldn’t it be easier and
> > cleaner that way, you don’t have to be repetitive.
> > I can’t remember exactly, but there was mention of sometime similar by
> > creating a facility and registering it, something along those lines?
>
> > Regards
>
> > On Aug 10, 7:50 am, Krzysztof Koźmic<[email protected]>
> > wrote:
> >>    No you cant - adding interceptor is a fine grained task and you seldom
> >> want to apply them globally.
> >> If you do though - nothis is stopping you from adding a helper method in
> >> your installer and registering through it.
>
> >> HTH
> >> Krzysztof
>
> >> On 9/08/2010 11:36 PM,PBwrote:
>
> >>> Finally got it working, have couple of questions though.
> >>> This is what I did:
> >>> public class LoggingProxyGenerationHook : IProxyGenerationHook
> >>> {
> >>>       public bool ShouldInterceptMethod(Type type, MethodInfo
> >>> methodInfo)
> >>>       {
> >>>           return GetLogAttribute(methodInfo) != null;
> >>>       }
> >>>       private static LogAttribute
> >>> GetLogAttribute(ICustomAttributeProvider methodInfo)
> >>>       {
> >>>           object[] logAttribute = methodInfo.GetCustomAttributes(typeof
> >>> (LogAttribute), true);
> >>>           if (logAttribute.Length == 0)
> >>>           {
> >>>               return null;
> >>>           }
> >>>           else
> >>>           {
> >>>               return (LogAttribute) logAttribute[0];
> >>>           }
> >>>       }
> >>> }
> >>> container.Register(Component.For<LogInterceptor>(),
> >>>                       Component.For<LoggingProxyGenerationHook>(),
> >>>                       Component.For<ILogger>().ImplementedBy<Logger>(),
> >>> Component.For<IFoo>().ImplementedBy<Foo>().Interceptors<LogInterceptor>().P­­roxy.Hook(
> >>>                           h =>
> >>> h.Service<LoggingProxyGenerationHook>()));
> >>> The above code registers LogInterceptor for implementation of IFoo.
> >>> What if I want to use the interceptor with every interface
> >>> implementation that is instantiated through the container. Is there a
> >>> global level where we can register the interceptor and the proxy hook,
> >>> in order to avoid the repetitive task of registeration for each
> >>> interface.
> >>> Thanks
> >>> On Jul 23, 1:25 pm, Krzysztof Koźmic<[email protected]>
> >>> wrote:
> >>>> Looks like it's missing from v2.1
> >>>> You'd have to write custom descriptor and call AddDescriptor(new
> >>>> MyDescriptor(new SomeHook()));
> >>>> In the descriptor you override the ApplyToModel method like this:
> >>>>        ProxyUtil.ObtainProxyOptions(model, true).Hook= this.hook;
> >>>> or you can upgrade to v2.5 which has that.
> >>>> HTH,
> >>>> Krzysztof
> >>>> On 23/07/2010 1:08 PM,PBwrote:
> >>>>> do you know what that way would be?
> >>>>> On Jul 20, 12:54 pm, Krzysztof Koźmic<[email protected]>
> >>>>> wrote:
> >>>>>> Correct, that was added recently. I think there was some way of
> >>>>>> specifying hook in v2.1.1 though
> >>>>>> On 20/07/2010 12:52 PM,PBwrote:
> >>>>>>> Hi
> >>>>>>> Thanks for reply. I am using v2.1.1 and there is no implementation of
> >>>>>>> Hook
> >>>>>>> Proxy.Hook(h  =>         h.Service<ProxyNothingHook>()
> >>>>>>> Regards
> >>>>>>> On Jul 13, 9:58 pm, Krzysztof Koźmic<[email protected]>
> >>>>>>> wrote:
> >>>>>>>> You don't register PGO, but you can configure all relevant aspects of
> >>>>>>>> the proxy mechanism.
> >>>>>>>> In trunk version of Windsor you can do:
> >>>>>>>> var  interceptor  =  new  ResultModifierInterceptor(5);
> >>>>>>>> container.Register(Component.For<ResultModifierInterceptor>().Instance(inte­­­­­rceptor),
> >>>>>>>>                             Component.For<ProxyNothingHook>(),
> >>>>>>>>                             Component.For<ICalcService>()
> >>>>>>>>                             .ImplementedBy<CalculatorService>()
> >>>>>>>>                             
> >>>>>>>> .Interceptors<ResultModifierInterceptor>()
> >>>>>>>>                             .Proxy.Hook(h  =>          
> >>>>>>>> h.Service<ProxyNothingHook>()));
> >>>>>>>> var  calc  =  container.Resolve<ICalcService>();
> >>>>>>>> Assert.AreEqual(4,calc.Sum(2,2));
> >>>>>>>> In version v2.1.1 something similar although you can provide hook 
> >>>>>>>> only
> >>>>>>>> as an instance IIRC.
> >>>>>>>> Version 2.5 beta1 does not have it which is my omission. Beta2 and 
> >>>>>>>> final
> >>>>>>>> version will work like the sample above
> >>>>>>>> Krzysztof
> >>>>>>>> On 13/07/2010 9:53 PM,PBwrote:
> >>>>>>>>> I came across this article of your on Selecting which methods to
> >>>>>>>>> intercept which shows an implementation of ProxyGenerationOptions 
> >>>>>>>>> with
> >>>>>>>>> ProxyGenerationHook. I am using windsor container and register types
> >>>>>>>>> as follow
> >>>>>>>>> IWindsorContainer container = new WindsorContainer();
> >>>>>>>>>       container.Register(
> >>>>>>>>>                      Component.For<IFoo>().ImplementedBy<Foo>(),
> >>>>>>>>>                      
> >>>>>>>>> Component.For<ILogger>().ImplementedBy<Logger>(),
> >>>>>>>>>                      
> >>>>>>>>> Component.For<LogInterceptor>().LifeStyle.Transient);
> >>>>>>>>> could you please indicate how can i register ProxyGenerationOptions
> >>>>>>>>> using windsor container. Thanks
> >>>>>>>>>http://kozmic.pl/archive/2009/01/17/castle-dynamic-proxy-tutorial-par...
> >>>>>>>>> On Jul 10, 11:15 pm, Krzysztof Koźmic<[email protected]>
> >>>>>>>>> wrote:
> >>>>>>>>>> using either IProxyGenerationHook, or IIntreceptorSelector
> >>>>>>>>>> Component.For<IFoo>().ImplementedBy<Foo>().Interceptors<SomeInterceptor,
> >>>>>>>>>> SomeOtherInterceptor>()
> >>>>>>>>>> 2010/7/10PB<[email protected]>:
> >>>>>>>>>>> thanks. then how can i prevent a method from being intercepted for
> >>>>>>>>>>> interfaces?
> >>>>>>>>>>> regards.
> >>>>>>>>>>> On Jul 9, 8:05 pm, Krzysztof Koźmic<[email protected]>
> >>>>>>>>>>> wrote:
> >>>>>>>>>>>> You're mixing stuff up here. Attributes and being virtual are 
> >>>>>>>>>>>> unrelated.
> >>>>>>>>>>>> Class components need to have methods virtual to be 
> >>>>>>>>>>>> interceptable.
> >>>>>>>>>>>> Interfaces are virtual by definition.
> >>>>>>>>>>>> You don't need attributes at all - just assign interceptor to the
> >>>>>>>>>>>> component when registering it.
> >>>>>>>>>>>> Krzysztof
> >>>>>>>>>>>> On 9/07/2010 12:30 PM,PBwrote:
> >>>>>>>>>>>>> I use Windsor container for DI in my application. I want to 
> >>>>>>>>>>>>> implement
> >>>>>>>>>>>>> interception and confused wether I'll have to change the 
> >>>>>>>>>>>>> existing
> >>>>>>>>>>>>> implementation to use Dynamic Proxy to create objects so that 
> >>>>>>>>>>>>> they can
> >>>>>>>>>>>>> be intercepted or is there a way to integrate with existing 
> >>>>>>>>>>>>> Windsor
> >>>>>>>>>>>>> container.
> >>>>>>>>>>>>> Also how can I implement attribute based method interception? I 
> >>>>>>>>>>>>> don't
> >>>>>>>>>>>>> want classes to be attributed with
> >>>>>>>>>>>>> [Interceptor(typeof(LogInterceptor))] and then create virtual 
> >>>>>>>>>>>>> methods.
> >>>>>>>>>>>>> Ninject allows you to derive your attribute class from
> >>>>>>>>>>>>> InterceptAttribute class and decorate methods for interception.
> >>>>>>>>>>>>> [AttributeUsage(AttributeTargets.Property|AttributeTargets.Method,
> >>>>>>>>>>>>> AllowMultiple = false, Inherited = true)]
> >>>>>>>>>>>>>           public class LogAttribute : InterceptAttribute
> >>>>>>>>>>>>>           {
> >>>>>>>>>>>>>               public override IInterceptor 
> >>>>>>>>>>>>> CreateInterceptor(IProxyRequest
> >>>>>>>>>>>>> request)
> >>>>>>>>>>>>>               {
> >>>>>>>>>>>>>                   return 
> >>>>>>>>>>>>> request.Context.Kernel.Get<LogInterceptor>();
> >>>>>>>>>>>>>               }
> >>>>>>>>>>>>>           }
> >>>>>>>>>>>>> Is it achievable with castle?
> >>>>>>>>>>>>> Thanks- Hide quoted text -
> >>>>>>>>>>>> - Show quoted text -
> >>>>>>>>>>> --
> >>>>>>>>>>> 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 
> >>>>>>>>>>> athttp://groups.google.com/group/castle-project-users?hl=en.-Hidequoted...
> >>>>>>>>>> - Show quoted text -- Hide quoted text -
> >>>>>>>> - Show quoted text -- Hide quoted text -
> >>>>>> - Show quoted text -- Hide quoted text -
> >>>> - Show quoted text -- Hide quoted text -
> >> - Show quoted text -- Hide quoted text -
>
> - Show quoted text -

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