Hi, ways are different, depends on what you want to have :)
If composites are predefined on the injector creation moment, may be
better to use multibinding:
interface A { void make();}
static class B implements A {
public void make() {}
}
static class CompositeA implements A {
Collection<A> composites;
@Inject
CompositeA(Set<A> composites) {
this.composites = composites;
}
@Override
public void make() {
for (A composite : composites) {
composite.make();
}
}
}
public static void main(String[] args) {
Injector inj = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {
bind(A.class).to(CompositeA.class);
final Multibinder<A> multibinder =
Multibinder.newSetBinder(binder(), A.class);
multibinder.addBinding().to(B.class);
multibinder.addBinding().toInstance(new B());
}
});
}
Set of A will be injected to CompositeA by Guice.
But it's hardly predefined composites and only Set could be used.
But composites will be injected by Guice, not by hand.
More here: http://code.google.com/p/google-guice/wiki/Multibindings
If composites can be changed in runtime, @Provides method or custom
provider is the best one.
Good luck,
Aleksey.
On May 22, 5:59 pm, Jelle Herold <[email protected]> wrote:
> Hi List,
>
> First: thanks for this fantastic project, it is really well designed!
>
> One question, I have a composite object, like so
>
> interface A { do(); }
>
> class B implements A { do() { ... } }
>
> class CompositeA implements A {
> List<A> composites = ...
> add(A a) { composites.add(a) };
> do() {
> for(A a : composites)
> a.do();
> }
> }
>
> What would be the best way to inject this?
>
> Right know I configure it in my Module using @Provides, like so
>
> @Provides A provideA() {
> final CompositeA a = new CompositeA();
> a.add(new B());
> a.add(new B());
> return a;
> }
>
> Although this works, it feels like I should be doing this differently.
>
> Please comment,
>
> Thanks for you time.
> Jelle.
>
> signature.asc
> < 1KViewDownload
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---