Yes, I think it can be a valid solution if I use Guice 2.0.

In an ideal world, I wish to not force my "contributors" to use such
specific kind of bindings (MapBinder + Provider) . My life would be really
easier if a kind of "enhanced provider" exists, with the injectee context...
:-|

Anyway, thanks Fred for this help!

Anthony


2010/1/19 Fred Faber <[email protected]>

> Ok, then consider using a MapBinder<TimeOfDay, Provider<ISomething>>.
>
> Instead of using annotations to identify each different instance of
> ISomething, simply associate it to its "time of day" through a key into the
> map.  Then inject the map into the Provider<ISomething> that I sketched out
> above.  The provider will determine which entry is closest to the current
> time, and use that.
>
> The provider can also have the default instance of ISomething injected into
> it, of course.
>
> -Fred
>
> On Tue, Jan 19, 2010 at 10:10 AM, Anthony MULLER <[email protected]
> > wrote:
>
>> 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]<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