Я пытаюсь создать библиотеку Android вместе с другим проектом, пока изучаю DI с Dagger 2. Это оказалось сложнее, чем ожидалось.
Мой вопрос
Я пытаюсь использовать одноэлементный класс с именем MySingleton
, к которому я хочу получить доступ как из моей библиотеки Android, так и из основного приложения.
Текущая настройка
В основном у меня есть одноэлементный класс с именем MySingleton
в моем проекте библиотеки Android. В проекте у меня есть класс SingletonModule
, который представляет собой модуль Dagger2, который предоставляет мой синглтон, подобный этому.
@Provides @Singleton
MySingleton providesMySingleton() {
return new MySingleton();
}
Хорошо, теперь в моем реальном приложении у меня есть следующий компонент.
@Singleton
@Component(modules = {SingletonModule.class})
public interface ApplicationComponent {
void inject( MyApplication application );
}
Таким образом, это используется для внедрения MySingleton
в класс MyApplication
. Делает это так.
this.applicationComponent = DaggerApplicationComponent.builder()
.singletonModule( new SingletonModule() ) // does it for you as empty constructor
.build();
applicationComponent.inject(this);
Это здорово, и экземпляр MySingleton
, который я вводил по полю, работает нормально.
Что я пробовал
В моем проекте библиотеки Android я создал новый компонент с именем SingletonComponent
, который выполнял те же функции, что и ApplicationComponent
, только предоставил объект MySingleton
. Затем в классе MyService
, который расширяет Service
, я внедрил по полю объект MySingleton
. Это не произвело на меня эффекта. Он действительно возражал против объекта MySingleton
, но это был не тот экземпляр, который был создан при внедрении в мое фактическое приложение. Я считаю, что это потому, что я создаю новый компонент ...
Что я здесь делаю не так?
Я просмотрел множество разных сайтов и выполнил множество руководств, но что-то просто не работает с этой инъекцией зависимостей.