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].
For more options, visit this group at http://groups.google.com/group/google-guice?hl=en.
