On 11/29/2011 05:39 PM, Xanadu wrote:
public class MyModule extends AbstractModule {
        @Override
        protected void configure() {
             MapBinder<String, Provider<MyInterface>>  providerMap =
MapBinder.newMapBinder(binder(), new TypeLiteral<String>() {}, new
TypeLiteral<Provider<MyInterface>>(){});
        
providerMap.addBinding("myKey1").to(MyInterfaceImpl1Provider.class);

providerMap.addBinding("myKey2").to(MyInterfaceImpl2Provider.class);
         }
}

Maybe my configuration is wrong...

Try this

public class MyModule extends AbstractModule {
        @Override
        protected void configure() {
MapBinder<String, MyInterface> binder = MapBinder.newMapBinder(binder(), String.class, MyInterface.class);
                binder.addBinding("X").toProvider(ProviderX.class);
                binder.addBinding("Another")
                 .toProvider(AnotherProviderX.class);
        }
}

public class Other {
@Inject public Other(Map<String, Provider<MyInterface> param) {}
}

and then you can use both Map<String, MyInterface> and Map<String, Provider<MyInterface>> as parameters for other elements. The difference is (as mentioned before) that in the first case object are created before injection in the second case when the get() method of a provider is called.

Best regards,
Bartosz

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