我正在尝试与另一个项目一起创建一个Android库,同时使用Dagger 2学习DI。事实证明,这比预期的要困难得多。
我的问题
我正在尝试使用一个单例类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
对象,但是它与注入到我的实际应用程序中时创建的实例不同。我相信这是因为它是我正在创建的新组件...
我在这里做错了什么?
我浏览了许多不同的站点并遵循了许多教程,但是这种依赖注入并没有带来什么好处。
我相信这是因为它是我正在创建的新组件...
你是绝对正确的。每个依赖图的单例是唯一的。创建第二个组件时,您实际上是在创建第二个依赖关系图,该图具有针对该单例的不同对象。
有两种解决方案:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句