Class Multibinder<T>
- Direct Known Subclasses:
Multibinder.RealMultibinder
public class SnacksModule extends AbstractModule {
protected void configure() {
Multibinder<Snack> multibinder
= Multibinder.newSetBinder(binder(), Snack.class);
multibinder.addBinding().toInstance(new Twix());
multibinder.addBinding().toProvider(SnickersProvider.class);
multibinder.addBinding().to(Skittles.class);
}
}
With this binding, a Set
<Snack>
can now be injected:
class SnackMachine {
@Inject
public SnackMachine(Set<Snack> snacks) { ... }
}
Create multibindings from different modules is supported. For example, it
is okay to have both CandyModule
and ChipsModule
to both
create their own Multibinder<Snack>
, and to each contribute bindings
to the set of snacks. When that set is injected, it will contain elements
from both modules.
Elements are resolved at set injection time. If an element is bound to a provider, that provider's get method will be called each time the set is injected (unless the binding is also scoped).
Annotations are be used to create different sets of the same element type. Each distinct annotation gets its own independent collection of elements.
Elements must be distinct. If multiple bound elements have the same value, set injection will fail.
Elements must be non-null. If any set element is null, set injection will fail.
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic final class
The actual multibinder plays several roles: -
Method Summary
Modifier and TypeMethodDescriptionstatic <T> Multibinder<T>
newSetBinder
(Binder binder, TypeLiteral<T> type) Returns a new multibinder that collects instances oftype
in aSet
that is itself bound with no binding annotation.
-
Method Details
-
newSetBinder
Returns a new multibinder that collects instances oftype
in aSet
that is itself bound with no binding annotation.
-