У меня есть Dagger объектный граф, который может создавать экземпляры MyClass
неявно, поскольку конструктор MyClass
аннотируется @Inject
.Синглтон только в графике с плюсовым кинжалом
У меня также есть модуль, который I plus
на моем существующем графике. Моя цель - для плюсового графика и только для плюсового графика, чтобы обрабатывать MyClass
в качестве одноэлементного и всегда возвращать один и тот же экземпляр.
Как я могу лучше всего добиться того, чтобы с минимальным шаблонного кода, то есть без
а) Построив экземпляры себя в plus'ed-модуль, написав метод @Provides @Singleton
, объявляя все зависимости от MyClass
:
@Module public class Submodule {
@Provides @Singleton MyClass provideMyClass(DepA depA, DepB depB) {
return new MyClass(depA, depB);
}
}
б) Извлечение интерфейс из MyClass
и снова писать методы Провайдер:
@Module public class Submodule {
@Provides @Singleton IMyClass provideMyClass(MyClassImpl myClass) {
return myClass;
}
}
Мой конкретный вариант использования - это приложение для Android, где экземпляр Activity
зависит от ведущего, который также должен быть введен в фрагменты активности. Поскольку существует несколько экземпляров одного и того же Activity
, я не могу объявить MyClass
синглтон глобально.
Я думаю, в конце концов, вопрос сводится к тому, как можно написать что-то вроде этого, без цикла зависимостей:
@Provides @Singleton public MyClass provideMyClass(MyClass m) { return m; }
Да, подумал. Имеет смысл, спасибо! –
Еще одна идея, что у меня было, что я отскакиваю от вас, так как вы написали единственный ответ :) Я сейчас размышляю, было бы ужасно или красиво, чтобы плюсы на самом модуле объявляли некоторые зависимости (например, ведущий) и пусть материнская графа создает экземпляр или вводит этот модуль? –
Вероятно, это тоже немного для Франкенштейна для читаемой кодовой базы ... –