Hi,

Thanks for your solution Leigh. It may come handy in case I will need to
choose between several instances loaded.

But what I need is really simple and I need to have only one (and the right
one) implementation of the class in my application.
As Dhanji said I also think that the wiring logic should go to the module.

That's why I think I will read a property in my module implementation and
depending of the value, it will pass the appropriate class to the binder
(using a switch case statement)
My question is now, is there already a component for doing this with Guice ?

Thanks,
Jonathan

2009/2/18 Dhanji R. Prasanna <[email protected]>

>
> I would strongly discourage making production code aware of wiring
> logic. The module is there for this purpose.
>
> Dhanji.
>
> On Thu, Feb 19, 2009 at 5:41 AM, Leigh Klotz <[email protected]>
> wrote:
> >
> > If your application is not exactly as described, but slightly more
> > complex and you need to map between myAnimal descriptions multiple
> > times, not just once, you might consider a Mapbinder.  It's similar to
> > your custom provider solution, but eliminates inline if/else code, and
> > promotes extension by addition in other modules, since all MapBinder
> > additions to a given type pair are shared.
> >
> > class Barn {
> >    @Inject Map<String, Animal> animals;
> >    void foo(String name) {
> >        Animal animal = animals.get(name);
> >        ...
> >    }
> >
> > }
> >
> > import com.google.inject.multibindings.MapBinder;
> >
> > class MyModule extends AbstractModule {
> >    private void defanimal(MapBinder<String, Animal>m, String name,
> > Class<? extends Animal> c) {
> >      m.addBinding(name).to(c);
> >    }
> >
> >    public void configure() {
> >        MapBinder<String, Animal> m = MapBinder.newMapBinder(binder(),
> > String.class, Animal.class);
> >        defanimal(m, "cow", Cow.class);
> >        defanimal(m, "goat", Goat.class);
> >    }
> >
> > }
> >
> > Leigh.
> >
> > On Feb 17, 4:25 pm, Jonathan Dray <[email protected]> wrote:
> >> Hi,
> >>
> >> I'm using Guice for DI in one of my projects.
> >> I need to choose the right class to inject depending on the value of a
> >> property read in a properties file.
> >> Here is a small exemple of what I want to do :
> >>
> >> Class myFarm {
> >>   @Inject
> >>   public myFarm(Animal animal) {
> >>   }
> >>
> >> }
> >>
> >> Now I want that the Animal injected here should be an instance of a
> >> "Cow" or a "Goat" (which implements the Animal Interface) mapped from
> >> the property "myAnimal" read in my application property file.
> >>
> >> I thought about two solutions  :
> >>
> >> 1. use a custom provider to get an animal which takes the value of the
> >> property as a parameter.
> >> 2. In the configure method of my Guice Module instance, read the
> >> property and add a binding depending on the value.
> >>
> >> Do I have any other alternative with Guice ?
> >> Which of these method would you chose in that case ?
> >>
> >> Thanks for your help.
> >> Regards,
> >> Jonathan Dray
> > >
> >
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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