You should have a look at the assisted inject extension: http://code.google.com/p/google-guice/wiki/AssistedInject
On Wed, Nov 18, 2009 at 7:02 AM, Ryan <[email protected]> wrote: > Hello everyone, > > I'm new to Guice (really enjoying it, by the way), but have come up > against a need and I'm not sure the most Guice-appropriate way to do > it. Done a lot of searching (including in this group), but am not > sure I found the solution. (Or perhaps I just didn't understand it.) > In any case, my question is how to select an implementation based on > some runtime value. For reference, a standard factory solution would > look like: > > class ServiceFactory { > public static Service get(int type) { > if(type == 1) { return new ServiceImpl1(); } > else if (type == 2) { return new ServiceImpl2(); } > } > } > > class Client { > public void process(int type) { > Service service = ServiceFactory.get(type); > } > } > > Feels too service locator-y. But I can think of no way to do this in > Guice except to inject the factory: > > class Client { > �...@inject > ServiceFactory factory; > > public void process(int type) { > Service service = factory.get(type); > } > } > > class ServiceFactoryProvider implements Provider<ServiceFactory> { > �...@override > public ServiceFactory get() { > return new ServiceFactory(); > } > } > > class MyModule extends AbstractModule { > �...@override > protected void configure() { > bind(Client.class); > } > } > > What am I missing here? What's the proper way to implement this with > Guice? I don't think BindingAnnotations will work for me here, > because the implementation is decided upon at runtime, but feel free > to correct me. > > Thank you! > Ryan > > -- > > 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=. > > > -- 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=.
