Есть ли способ рассказать кинжалу 2, как обеспечить что-то, но не позволить ему впрыскиваться?Может ли зависимость кинжала 2 быть неинъекционной?
Скажем, я хочу ввести Qux
. Qux
требует Foo
и Bar
:
@Provides
@Singleton
Foo foo() {
return new Foo();
}
@Provides
@Singleton
Bar bar() {
return new Bar();
}
@Provides
@Singleton
Qux qux(final Foo foo, final Bar bar) {
return new Qux(foo, bar);
}
Но что, если я не хочу Foo
и Bar
быть инъекционный? Возможно, их разоблачение может сломать инкапсуляцию Qux
, или, возможно, это какие-то фабрики, для которых я хочу получить доступ только к Qux
.
Я думал пару способов, которыми я мог бы достичь этого:
- Если
Foo
одноточечно требуется другими поставщиками, я мог бы сделать его членом класса. Но это будет беспорядочно, еслиFoo
имеет несколько собственных зависимостей. - Если
Bar
singleton не нужен никакими другими провайдерами, я мог бы создать экземпляр внутри поставщикаQux
. Но это будет беспорядочно, еслиQux
имеет несколько зависимостей.
Ни одно из этих решений не кажется очень изящным или одаренным. Есть ли другой способ?
Да, если привязки для 'Foo' и' Bar' находятся в разных пакетах от привязки для 'Qux', тогда это не сработает, но я бы сказал, что если вы хотите, чтобы эти отношения были немного странными, он пересечет границу пакета. – gk5885