I'm curious why. "myModule" needs nothing from, and provides nothing to, 
the airlinesModule. Why would it also need to be wrapped in a 
PrivateModule? The only reason I'm wrapping airlineModule is because I have 
a 3rd module I want to add which would have conflicts with airlineModule. 
My first step was trying to get airlineModule to work as a PrivateModule 
before adding in the complexity of the 3rd module.

On Wednesday, March 23, 2016 at 6:57:11 PM UTC-7, Tavian Barnes wrote:
>
> You have to put both of them in PrivateModules, and export the things you 
> need.
>
> On Wednesday, 23 March 2016 13:16:51 UTC-4, Chris Kessel wrote:
>>
>> I must be doing something wrong then. I'm using Dropwizard, which does 
>> this behind the scenes:
>>             injector = 
>> injectorFactory.create(this.stage,ImmutableList.copyOf(this.modules));
>>
>> I'm passing in that list of modules. 
>>
>> This works:
>> Arrays.asList(myModule, airlineModule);
>>
>> This fails:
>> Arrays.asList(
>>    myModule, 
>>    new PrivateModule() {
>>                     protected void configure() {
>>                         install(airlinesModule);
>>                     }
>>                 });
>>
>> It fails with:
>>
>> 1) Unable to create binding for com.kessel.airlines.AirlineCache. It was 
>> already configured on one or more child injectors or private modules
>>     bound at com.kessel.airlines.AirlineModule.provideAirlineCache() (via 
>> modules: com.kessel.MyMain$1 -> com.kessel.airlines.AirlineModule)
>>   If it was in a PrivateModule, did you forget to expose the binding?
>>
>> However, the AirlineCache is provided in the AirlineModule. Why is 
>> wrapping it in a PrivateModule causing this failure?
>>     @Provides
>>     @Singleton
>>     public AirlineCache provideAirlineCache() {
>>            ...
>>      }
>>
>> On Tuesday, March 22, 2016 at 4:53:28 PM UTC-7, scl wrote:
>>>
>>> Private modules is the way to go.
>>> A binding in a private module can see all other bindings in the same 
>>> private module and all bindings of all non private modules.
>>>
>>>
>>>
>>> On 22.03.2016 21:58, Chris Kessel wrote:
>>>
>>> I'm adding two Guice modules, but they both have an @Provides for the 
>>> same item. They're both 3rd party modules, so I can't modify the code. How 
>>> do I prevent the collision? I really need each module to use it's own 
>>> provided version. I guess the equivalent of each living within it's own 
>>> "scope" where it's provided items aren't visible to the other modules. 
>>>
>>> Guice.createInjector(Stage.DEVELOPMENT, Arrays.asList(moduleA, moduleB));
>>>
>>> I've tried wrapping them in a PrivateModule, but then they don't seem to 
>>> even see their own @Provides...maybe I'm not understanding how to configure 
>>> a PrivateModule? I'll actually want expose one specific class from each 
>>> module to to my module that I'm developing, but my first step was trying to 
>>> get these two other modules to coexist.
>>>
>>> The injector supports creation with multiple modules and it seems like 
>>> provider collision would happen now and then, so presumably there's some 
>>> way to deal with that I'm not groking...
>>>
>>> Thanks,
>>> Chris
>>>
>>> -- 
>>> 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 https://groups.google.com/group/google-guice.
>>> To view this discussion on the web visit 
>>> <https://groups.google.com/d/msgid/google-guice/26e2e40f-3b26-4ec5-bd20-1c3a2f67fd1e%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> https://groups.google.com/d/msgid/google-guice/26e2e40f-3b26-4ec5-bd20-1c3a2f67fd1e%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 https://groups.google.com/group/google-guice.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-guice/f17bbab7-7d7d-44b5-b437-1fb4c9823081%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to