The following code is an example of a factory that produces a Bar
given a Foo
. The factory doesn\'t care what T
is:
If you think of guice as a system of wiring similar to spring, then it doesn't really make sense to wire a generic instance. You're wiring specific instances to keys, so that when another instantiated class marks something with @Inject BarFactory you get the specific created instance.
Since your implementation is generic, you haven't provided enough information to inject a specific instance. Although I haven't used factoryprovider, my assumption is that you'll need to bind the Barfactory to a fully parameterized instance, e.g. BarImpl
instead of BarImpl )
Incidentally since you're binding BarFactory.class if you want to bind multiple instances you're going to have to inflect them somehow, either by name, something like (haven't checked the syntax, but)
bind(BarFactory.class).annotatedWith(Names.named("name1"))
.toProvider(
or by generics, bind(BarFactory).toProvider...