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/java/org/jclouds/logging/config/BindLoggersAnnotatedWithResource.java
>>>>>>
>>>>>> 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
-~----------~----~----~----~------~----~------~--~---