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] <javascript:>.
> To post to this group, send email to [email protected]
> <javascript:>.
> 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/a285086d-55c7-41d5-96cd-e7edcc90fce7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.