One thing that will not work is injecting A into either ASub or AOtherSub. 
Because this will create an endless loop sinc A is bound to ASub resp. 
AOtherSub.
You need to be more specific and either request ACore or introduce a name for 
the parent so you could inject (@Parent A)

Am 4. Februar 2015 16:59:09 MEZ, schrieb Joshua Moore-Oliva 
<[email protected]>:
>If I am understanding your use case correctly, it sounds like you may
>be 
>interested in using the OptionalBinder that is new in guice4. It would 
>allow you to set up a default binding (setDefault) in core, and then 
>override that in a sub (setBinding).
>
>The javadoc is fairly thorough and has some examples here:
>
>http://google.github.io/guice/api-docs/latest/javadoc/com/google/inject/multibindings/OptionalBinder.html
>
>
>
>On Tuesday, February 3, 2015 at 3:36:28 PM UTC-7, Aurélien wrote:
>>
>> Hi,
>>
>> I have a peculiar use case:
>> - I have 3 libraries, Core, Sub and OtherSub
>> - Sub and OtherSub do not know anything about each other, but they
>know 
>> the existence of Core
>> - Sub and OtherSub override the same functionality in Core
>> - In a project, I want to combine Sub and OtherSub.
>>
>> It does not work, but here is how I wanted to implement this pattern
>with 
>> Guice:
>> - in the Core library:
>>     o bind(A.class).to(ACore.class)
>>     o class ACore implements A {
>>         @Override public String a() { "a"; }
>>     }
>> - in the Sub library:
>>     o bind(A.class).to(ASub.class)
>>     o class ASub implements A {
>>         private final A parent; // instance of ACore or AOtherSub
>>         @Inject ASub(A parent) { this.a = parent; }
>>         @Override public String a() { parent.a() + " overriden"; }
>>     }
>> - in the OtherSub library:
>>     o bind(A.class).to(AOtherSub.class)
>>     o class AOtherSub implements A {
>>         private final A parent; // instance of ACore or ASub
>>         @Inject ASub(A parent) { this.a = parent; }
>>         @Override public String a() { parent.a() + " !"; }
>>     }
>>
>> then in the projet using this set of libraries, I would have been
>able to 
>> do:
>> - Guice.createInjector(Modules.override(new ModuleCore()).with(new 
>> AOtherSub())).getInstance(A.class).a() // returns "a !"
>> - Guice.createInjector(Modules.override(Modules.override(new 
>> ModuleCore()).with(new ASub())).with(new 
>> AOtherSub())).getInstance(A.class).a() // returns "a overriden !"
>> - Guice.createInjector(Modules.override(Modules.override(new 
>> ModuleCore()).with(new AOtherSub())).with(new 
>> ASub())).getInstance(A.class).a() // returns "a ! overriden"
>>
>> In this implementation, this throws a StackOverflowError because in
>ASub 
>> or in AOtherSub the instance creation falls in an infinite loop.
>>
>> Is there a way of doing something like that with Guice ?
>> Else do you have any insight on how I should implement this use case
>?
>>
>> Cheers,
>> Aurélien
>>
>
>-- 
>You received this message because you are subscribed to the Google
>Groups "google-guice" group.
>To unsubscribe from this group and stop receiving emails from it, send
>an email to [email protected].
>To post to this group, send email to [email protected].
>Visit this group at http://groups.google.com/group/google-guice.
>To view this discussion on the web visit
>https://groups.google.com/d/msgid/google-guice/940d9eaf-f9d4-44ad-9487-737b76a7b228%40googlegroups.com.
>For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-guice/D6CBA2EC-C080-474D-806E-3FE9430A5145%40gmx.ch.
For more options, visit https://groups.google.com/d/optout.

Reply via email to