The typical way of doing something like this is using AssistedInject ( http://code.google.com/p/google-guice/wiki/AssistedInject). B would be an @Assisted parameter to A, and there'd be an AFactory class with a method that returns A and takes a B as a parameter. Users would inject AFactory and construct their A by passing the appropriate B. It's possible that you can fold that functionality into a specialized provider for annotated As, also.
(Alternately, you could use reflection to get at the constructor & call it, if that's your only limitation.) sam On Fri, Jul 15, 2011 at 10:27 AM, glenviewjeff <[email protected]>wrote: > *Also posted on stack overflow <http://stackoverflow.com/q/6708534/403455> > * > > I have a class A that holds a class B like this: > > class A { > private final B; > @Inject > A(B b) { > this.b = b; > } > } > > interface B {} > class B1 {} > class B2 {} > > I'm using annotations to construct different flavors of A classes that each > hold the available B classes (@B1, @B2). The binding configurations look > like this: > > @Provides @B1 A provideAwithB1(B1 b1) { > return new A(b1) > } > @Provides @B2 A provideAwithB2(B2 b2) { > return new A(b2) > } > > Right now the only module configuration I can come up with prevents me from > making A's constructor private, and it seems more complex and verbose than > need be. Is there a Guice extension or technique that I am unaware of that > solves this problem more concisely? Ideally I'd write something like this > instead: > > bindChildren(A.class).annotatedWith(B1annotation.class).to(B1.class); > bindChildren(A.class).annotatedWith(B2annotation.class).to(B2.class); > > -- > You received this message because you are subscribed to the Google Groups > "google-guice" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/google-guice/-/DE3K51hdk_AJ. > 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. > -- 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.
