我试图在与Dagger 2学习DI的同时与另一个项目一起创建一个Android库。事实证明它比预期更难。
我的问题
我尝试使用名为MySingleton
的单例类,我想从我的Android库以及主应用程序中访问。
当前设置
基本上我的Android库项目中有一个名为MySingleton
的单例类。在项目中,我有一个名为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
的{{1}}类中,我按字段注入了Service
个对象。这没有我所追求的效果。它确实对象是MySingleton
对象,但它与注入我的实际应用程序时创建的实例不同。我相信这是因为它是我创造的新组件......
我在这里做错了什么?
我查看了很多不同的网站,并且遵循了许多教程,但是这些依赖注入并没有点击。
答案 0 :(得分:1)
我相信这是因为它是我正在制作的新组件......
你是完全正确的。单身人士每个依赖图都是唯一的。在创建第二个组件时,您实际上是在创建第二个依赖关系图,它具有该单例的不同对象。
有两种解决方案: