#guice
#guice
Вопрос:
У меня есть следующее дерево зависимостей частного модуля Guice:
public class FooModule extends PrivateModule {
@Override
protected void configure() {
install(new BarModule());
bind(Person.class);
expose(Person.class);
}
}
public class BarModule extends PrivateModule {
@Override
protected void configure() {
install(new LifeImplModule());
bind(Animal.class);
expose(Animal.class);
}
}
public class LifeImplModule extends PrivateModule {
@Override
protected void configure() {
bind(Life.class).toInstance(new LifeImpl());
expose(Life.class);
}
}
public class Animal {
@Inject
public Animal(Life life) {
//
}
}
public class Person {
@Inject
public Person(Life life) {
//
}
}
Теперь, когда я Guice.createInjector(new FooModule()).getInstance(Person.class)
это делаю, происходит сбой, поскольку он не распознает привязку, в Life.class
то Guice.createInjector(new FooModule()).getInstance(Animal.class)
время как работает, поскольку у него есть привязка к Life
via BarModule
.
Как мне решить эту проблему? Я попытался переместить
install(new LifeImplModule());
to FooModule()
но тогда Animal.class
не работает, пока Person.class
работает.
Кто-нибудь может объяснить, как работает частный модуль Guice с точки зрения наследования привязок? install(LifeImplModule())
Не FooModule
работает для обоих Person.class
и дочернего модуля BarModule()
?
Ответ №1:
Поскольку BarModule
это частный модуль, любые модули, установленные внутри него, не будут доступны извне.
Вот почему
install(new LifeImplModule());
не предоставляет доступ к Life
привязке для FooModule
.
Вы можете решить эту проблему, явно предоставив Life
из BarModule
install(new LifeImplModule());
expose(Life.class);