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.

Reply via email to