The provider could be a solution, but the problem is I don't have
information on the injectee (in my case: the attached annotations)... So, I
can not control the injection as I wish :-/


2010/1/19 Marcos Alcantara <[email protected]>

> "I'd like that Guice call me when it tries to inject, and so I will return
> the "better" instance. "
>
> Isn“t this the provider role?
>
> You can extend the Provider class too so you can inject other "context"
> objects into it and decide which instance would be best for the moment.
>
> =)
>
> Hope this can help you.
>
> Best regards,
>
> Marcos Alcantara
>
> On Tue, Jan 19, 2010 at 11:56 AM, Anthony MULLER <[email protected]
> > wrote:
>
>> Thanks Fred! But my bindings are "modular"... I don't know them before
>> startup...
>>
>> In the example, imagine the injectee must be the instance with the time
>> the closest of injection time. Or, if no "@Timed" is provided, the default
>> implementation must be injected.
>>
>> // Example
>> public class MaClasse {
>>        @Inject // Default injection
>>        private ISomething something;
>>
>>        @Inject @Timed // Timed injection
>>        private ISomething something;
>> }
>>
>> Bindings :
>> ISomething --> DefaultSomethingImpl // Default
>>
>> "Contributors" can provided bindings like:
>> ISomething @Named("8:15") --> SomethingMorningImpl // Optional
>> ISomething @Named("12:30") --> SomethingMiddayImpl // Optional
>> ISomething @Named("20:55") --> SomethingEveningImpl // Optional
>>
>> As you see, I don't know the list in advance...
>>
>> The provider could be a solution, but the problem is I don't have
>> information on the injectee (in my case: the attached annotations)... So, I
>> can not control the injection as I wish :-/
>>
>> Maybe it is possible to do what I wish by using Guice 2.0 and its SPI?
>>
>> Regards,
>> Anthony
>>
>>
>> 2010/1/19 Fred Faber <[email protected]>
>>
>>>  Anton's suggestion should do the trick:
>>>
>>> class ISomethingProvider implements Provider<ISomething> {
>>>
>>>  @Inject @ReportsTimeOfDay
>>>  TimeOfDayReporter timeOfDayReporter;
>>>
>>>  @Inject @Name("morning")
>>>   Provider<ISomething> somethingMorningProvider;
>>>
>>>  @Inject @Name("midday")
>>>   Provider<ISomething> somethingMiddayProvider;
>>>
>>>  @Inject @Name("evening")
>>>   Provider<ISomething> somethingEveningProvider;
>>>
>>>  @Override
>>>  public ISomething get() {
>>>      TimeOfDay timeOfDay = timeOfDayReporter.getTimeOfDay();
>>>      if (timeOfDay.isMorning()) {
>>>        return somethingMorningProvider.get();
>>>     } else if (....) {
>>>       ....
>>>     }
>>>  }
>>> }
>>>
>>>
>>> and then:
>>>
>>> bind(ISomething.class)
>>>   .toProvider(ISomethingProvider.class);
>>>
>>>
>>> * * *
>>>
>>> "injection context" is a vague and simultaneous powerful concept, which
>>> is different from application to application, and even injection to
>>> injection.  the provider construct allows flexible definitions of this
>>> context to suit each setting.
>>>
>>> -Fred
>>>
>>> On Tue, Jan 19, 2010 at 9:18 AM, Anthony MULLER <
>>> [email protected]> wrote:
>>>
>>>> Ok!
>>>>
>>>> Imagine I have several bindings for ISomething :
>>>>
>>>> ISomething @Named("morning") --> SomethingMorningImpl
>>>> ISomething @Named("midday") --> SomethingMiddayImpl
>>>> ISomething @Named("evening") --> SomethingEveningImpl
>>>>
>>>> At runtime, I know what time is it and I wish that the proper instance
>>>> is injected according the time:
>>>>
>>>> public class MaClasse {
>>>>        @Inject
>>>>        @Timed
>>>>        private ISomething something;
>>>> }
>>>>
>>>> I'd like that Guice call me when it tries to inject, and so I will
>>>> return the "better" instance.
>>>>
>>>> As you see, the framework is not able to decide alone in that case. But
>>>> if it is possible to plug behaviour at injection time, this case can be
>>>> resolved.
>>>>
>>>> Hoper I'm clearer :-p
>>>>
>>>> Regards,
>>>> Anthony
>>>>
>>>>
>>>> 2010/1/19 Fred <[email protected]>
>>>>
>>>>> Could you please give an example?  I'm having a hard time interpreting
>>>>>
>>>>> what you mean.
>>>>>
>>>>> On Jan 19, 8:15 am, Anthony MULLER <[email protected]> wrote:
>>>>> > Hello,
>>>>> >
>>>>> > I can't remember... I work with Guice 1.0.
>>>>> >
>>>>> > Is is possible to take the hand when it is written:
>>>>> >
>>>>> > public class MaClasse {
>>>>> >
>>>>> >        @Inject
>>>>> >        private ISomething something;
>>>>> >
>>>>> > }
>>>>> >
>>>>> > I'd like to write a specific resolution, to choose the "best"
>>>>> binding....
>>>>> >
>>>>> > Thanks,
>>>>> > Anthony
>>>>>
>>>>> --
>>>>> 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]<google-guice%[email protected]>
>>>>> .
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/google-guice?hl=en.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> 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]<google-guice%[email protected]>
>>>> .
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/google-guice?hl=en.
>>>>
>>>>
>>>
>>> --
>>> 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]<google-guice%[email protected]>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/google-guice?hl=en.
>>>
>>>
>>
>> --
>> 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]<google-guice%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/google-guice?hl=en.
>>
>>
>
> --
> 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]<google-guice%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-guice?hl=en.
>
>
--
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.

Reply via email to