On Friday, August 14, 2009, Gili <[email protected]> wrote: > > I filed a RFE for injection context: > http://code.google.com/p/google-guice/issues/detail?id=412 > > Gili > > On Jul 25, 1:17 pm, Adrian Cole <[email protected]> wrote: >> Indeed you are correct. I believe this is the only way to accomplish >> the goal with the current version of guice without hacking core >> classes. I don't think this was possible at all in Guice 1.0. >> >> For this to be accomplished natively, one way could be to add a >> context to providers. In this context, one could reach the injectee >> like below: >> >> @Provider Logger providerLogger(InjectionContext context){ >> return Logger.getLogger(context.getInjectee().getClass().getName()); >> >> } >> >> I'm interested in other opinions on how to accomplish this. >> >> Regards, >> -Adrian >> jclouds >> >> On Sat, Jul 25, 2009 at 4:51 PM, Gili Tzabari<[email protected]> wrote: >> >> > Hi Adrian, >> >> > If I understand your code directly, you always inject >> > Logger.getRootLogger() into the constructor, then use reflection to >> > alter the field after-the-fact to the current type. Is this correct? >> >> > I'm looking for a way to set the Constructor argument to the right >> > value in the first place, instead of fixing it after the fact. It seems >> > to me that Guice 2.0 is missing a facility for this sort of thing. Are >> > there any plans for adding one in Guice 2.1 or 3.0? >> >> > Thanks, >> > Gili >> >> > Adrian Cole wrote: >> >> Hi, Gili. >> >> >> I've just coded this for you.. I hope you digg it ;) >> >> >>http://digg.com/d3yXEh >> >> >> Cheers, >> >> -Adrian >> >> jclouds >> >> >> On Fri, Jul 24, 2009 at 2:22 PM, Gili Tzabari<[email protected]> >> >> wrote: >> >>> Guys, >> >> >>> I don't understand your answers. It sounds to me like you're >> >>> talking >> >>> about field injection, not constructor injection. >> >> >>> I don't want to inject a log into an already-constructed object. >> >>> I want >> >>> to inject a log directly into the class constructor: >> >> >>> class Foo >> >>> { >> >>> private final Logger log; >> >> >>> @Inject >> >>> public Foo(Logger log) >> >>> { >> >>> this.log = log; >> >>> } >> >>> } >> >> >>> Also, I am not necessarily doing this for jdk loggers so please >> >>> provide >> >>> more detail on how to write a custom injection listener to do this. >> >> >>> Thanks, >> >>> Gili >> >> >>> Adrian Cole wrote: >> >>>> If just injecting a log class, you're right: that's trivial. The >> >>>> less trivial part is setting the log scope relevant to the object >> >>>> being constructed. >> >> >>>> -Adrian >> >> >>>> On Fri, Jul 24, 2009 at 10:51 AM, Dhanji R. Prasanna<[email protected]> >> >>>> wrote: >> >>>>> You can also write a trivial injection listener that looks for whatever >> >>>>> logging class you like and set it after construction. >> >>>>> Dhanji. >> >> >>>>> On Fri, Jul 24, 2009 at 5:49 PM, Adrian Cole <[email protected]> >> >>>>> wrote: >> >>>>>> In jclouds, we use a similar approach, but don't bind ourselves to >> >>>>>> java or log4j: >> >>>>>> http://code.google.com/p/jclouds/wiki/LogDesign >> >> >>>>>> Here's the configuration class that may help you do what you are >> >>>>>> looking >> >>>>>> for: >> >> >>>>>>http://code.google.com/p/jclouds/source/browse/trunk/core/src/main/ja... >> >> >>>>>> I hope this helps, >> >>>>>> -Adrian >> >>>>>> jclouds >> >> >>>>>> On Fri, Jul 24, 2009 at 6:15 AM, Dhanji R. Prasanna<[email protected]> >> >>>>>> wrote: >> >>>>>>> You can already do this with jdk loggers. >> >>>>>>> Dhanji. >> >> >>>>>>> On Fri, Jul 24, 2009 at 2:12 PM, Gili <[email protected]> wrote: >> >>>>>>>> Hi, >> >> >>>>>>>> Is it possible to implement Log4JMembersInjector -- as found here: >> >>>>>>>>http://code.google.com/p/google-guice/wiki/CustomInjections-- but for >> >>>>>>>> constructor injection instead? That is, I'd like Guice to be smart >> >>>>>>>> enough to inject the correct Logger instance into the constructor >> >>>>>>>> automatically. I took a look at InjectionListener but it seems to >> >>>>>>>> hook >> >>>>>>>> instances that have already been injected. Another approach that >> >>>>>>>> comes >> >>>>>>>> to mind is: >> >> >>>>>>>> @Provides >> >>>>>>>> public Logger getLogger(Class<?> outerClass); >> >> >>>>>>>> If I could somehow get Guice to pass in the correct Class... Any >> >>>>>>>> ideas? >> >> >>>>>>>> Gili >> >> > > >
--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "google-guice" 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/google-guice?hl=en -~----------~----~----~----~------~----~------~--~---
