It's been so long and still not official solution?
I'm still using FactoryProvider, there is no other option for injecting 
multiple providers to a MapBinder


On Monday, August 2, 2010 3:28:28 PM UTC-7, Leigh Klotz, Jr. wrote:
>
> Thank you. I have opened a bug on this so it can be decided, once 
> Amtrak gets the engine restarted. 
>
> http://code.google.com/p/google-guice/issues/detail?id=530 
>
> Leigh. 
>
> On Jul 23, 4:13 pm, Sam Berlin <[email protected]> wrote: 
> > Ahhh - I understand what you're going for. Something similar to this   
> > came up internally recently. How about this as a workaround: 
> >    for ( Fruit fruit : Fruit.values() ) { 
> >      Key key = Key.get(FactoryModuleBuilder.class,   
> > UniqueAnnotation.create()); 
> >       install(new FMB().build(key)); 
> >      mapBinder.addBinding(fruit).toProvider(getProvider(key)); 
> >    } 
> > 
> > UniqueAnnotations is package-private to Guice, so you'll have to   
> > recreate it (or you can use a named binding keyed off the enum). 
> > 
> > This is a pretty solid use-case, though, and FactoryModuleBuilder   
> > could easily have a getProvider method in it to make this easier. 
> > 
> > (FYI, code samples written on my phone while on an Amtrak train whose   
> > engine broke, so we're literally "rolling" from stop to stop.  So it   
> > won't compile, but it's unnecessarily detailed for phone code.) 
> > 
> > Sam 
> > 
> > On Jul 23, 2010, at 6:42 PM, Leigh Klotz <[email protected]> wrote: 
> > 
> > > Unless I'm mistaken, that would work if there's only one provider, but 
> > > the FactoryProvider mechanism allows for creation of multiple 
> > > providers which are essentially anonymous until named (made reachable) 
> > > by inclusion in the mapbinder. 
> > 
> > > The various links in the original post about the command pattern show 
> > > the use case in more detail, but the code snippets about orange and 
> > > banana directly in the original message are enough to see it (if not 
> > > to motivate it the use case).  Both are implementations of interface 
> > > FruitFactory but neither is bound to FruitFactory.class. 
> > 
> > > Leigh. 
> > 
> > > On Jul 22, 2:01 pm, Sam Berlin <[email protected]> wrote: 
> > >> I haven't tested this (and am writing it on my phone), but try 
> > >> installing FactoryModuleBuilder as normal and then binding the 
> > >> mapbinder with mapBinder.addBinding(blah).toProvider(getProvider 
> > >> (MyFactory.class)). "getProvider" being the important bit here. 
> > 
> > >> Sam 
> > 
> > >> On Jul 22, 2010, at 2:11 PM, Leigh Klotz <[email protected]>   
> > >> wrote: 
> > 
> > >>> I seem to ask questions about these three things fairly regularly,   
> > >>> so 
> > >>> please bear with me if you find it repetitive. 
> > 
> > >>> With earlier versions of assistedinject, I could use 
> > >>> FactoryProvider.newFactory like this: 
> > 
> > >>>  mapbinder.addBinding("orange"). 
> > >>>          toProvider(FactoryProvider.newFactory(FruitFactory.class, 
> > >>> Orange.class)); 
> > >>>  mapbinder.addBinding("banana"). 
> > >>>          toProvider(FactoryProvider.newFactory(FruitFactory.class, 
> > >>> Banana.class)); 
> > 
> > >>>   @Inject Map<String, FruitFactory> map; 
> > >>>   map.get(fruitname).bear(3); 
> > 
> > >>> See discussion of this "command" pattern with mapbinder and 
> > >>> assistedinject here:http://tinyurl.com/22t28y6 
> > 
> > >>> With FactoryModuleBuilder, I'm not sure how to obtain the Provider 
> > >>> object to put into the mapbinder. 
> > 
> > >>> Below are some half-baked ideas I've pursued; if you already know   
> > >>> what 
> > >>> I mean by reading the above, this part probably will just be 
> > >>> confusing. 
> > 
> > >>> I did see that I can create annotated providers, in answer to a 
> > >>> question I asked about FactoryModuleBuilder:http://tinyurl.com/ 
> > >>> 2baormz 
> > 
> > >>> But it's not clear to me that this gives me the indirection I need   
> > >>> to 
> > >>> bear dynamic fruit. 
> > 
> > >>> I also see you can use TypeLiteral with FactoryModuleBuilder.  So 
> > >>> perhaps I could simply drop the mapbinder altogether and change   
> > >>> Fruit 
> > >>> to be Fruit<T> and let Guice's type mechanism satisfy the type 
> > >>> injection of FruitFactory<Orange>, but I still lack the indirection 
> > >>> necessary to obtain a FruitFactory where the fruit class is known   
> > >>> only 
> > >>> at runtime. 
> > 
> > >>> Thank you, 
> > >>> Leigh. 
> > 
> > >>> -- 
> > >>> 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]<javascript:>. 
>
> > >>> To unsubscribe from this group, send email to 
> [email protected] <javascript:> 
> > >>> . 
> > >>> For more options, visit this group athttp://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]<javascript:>. 
>
> > > To unsubscribe from this group, send email to 
> [email protected] <javascript:> 
> > > . 
> > > For more options, visit this group athttp://
> groups.google.com/group/google-guice?hl=en 
> > > .

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to