Thanks!

I used a MapFinder to bind different instance for the same interface
distinguished by key.

//rdcyash

On Sep 9, 10:27 am, Dan Godfrey <[email protected]> wrote:
> Not that I know of. You'd need to either push a factory into the map
> which creates the instances, although then you're losing the injection
> into the calculators, or something like the following. (written
> inline, so may well have some typos). Issue here, I think, is that if
> you're missing a dependency binding, you won't find out about it till
> you call CalculatorFactory#create()
>
> public class CalculatorModule extends AbstractModule {
>    protected void configure() {
>      MapBinder<Types, Class<ICalculator>> mapbinder
>          = MapBinder.newMapBinder(binder(), Types.class,
> ICalculator.class);
>      mapbinder.addBinding(Types.A).toInstance(ACalculator.class);
>      mapbinder.addBinding(Types.B).toInstance(BCalculator.class);
>      mapbinder.addBinding(Types.C).toInstance(CCalculator.class);
>    }
>  }
>
> @Singleton
> public class CalculatorFactory {
>     private final Injector injector;
>     private final Map<Types, Class<Calculator>> calculators;
>
>   �...@inject
>    public CalculatorFactory(Injector injector, Map<Types,
> Class<Calculator>> calculators) {
>         this.injector = injector;
>         this.calculators = calculators;
>     }
>
>     public ICalculator create(UserGroup group) {
>          injector.getInstance(calculators.get(group.getType));
>     }
>
> }
>
> On Sep 8, 3:34 pm, rdcyash <[email protected]> wrote:
>
>
>
> > I know you have mentioned but is there any possibility for each get
> > from the map I can have a new instance of the class instead of
> > singleton?
>
> > Thanks!
>
> > On Sep 3, 10:10 am, Dan Godfrey <[email protected]> wrote:
>
> > > I forgot to add this link for further 
> > > info:http://code.google.com/p/google-guice/wiki/Multibindings
>
> > > On Sep 2, 4:44 pm, cpea <[email protected]> wrote:
>
> > > > That's great, thank-you! I'm going to try that... it would greatly
> > > > simplify the amount of code.
>
> > > > On Sep 2, 1:58 am, Dan Godfrey <[email protected]> wrote:
>
> > > > > If there's a one-to-one mapping between the Types and calculators and
> > > > > the calculators can be singletons, you could have used aMapBinder.
> > > > > However you still need the CalculatorFactory or a CalculatorRegistry
> > > > > (as it's not actually creating anything anymore), it's a bit smaller
> > > > > and a lot less boilerplate to maintain.
>
> > > > > public class CalculatorModule extends AbstractModule {
> > > > >    protected void configure() {
> > > > >      MapBinder<Types, ICalculator>mapbinder
> > > > >          =MapBinder.newMapBinder(binder(), Types.class,
> > > > > ICalculator.class);
> > > > >      mapbinder.addBinding(Types.A).to(ACalculator.class);
> > > > >      mapbinder.addBinding(Types.B).to(BCalculator.class);
> > > > >      mapbinder.addBinding(Types.C).to(CCalculator.class);
> > > > >    }
> > > > >  }
>
> > > > > @Singleton
> > > > > public class CalculatorFactory {
> > > > >     private final Map<Types, Calculator> calculators;
>
> > > > >   �...@inject
> > > > >    public CalculatorFactory(Map<Types, Calculator> calculators) {
> > > > >         this.calculators = calculators;
> > > > >     }
>
> > > > >     public ICalculator create(UserGroup group) {
> > > > >          calculators.get(group.getType);
> > > > >     }
>
> > > > > }- Hide quoted text -
>
> > > - Show quoted text -- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
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