匕首依赖注入2
问题描述:
我试图在用Dagger 2学习DI的同时创建一个Android库以及另一个项目。它证明比预期更困难。匕首依赖注入2
我的问题
我试图用所谓的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
类中扩展Service
类,我通过字段注入了MySingleton
对象。这没有我以后的效果。它确实反对MySingleton
对象,但它与注入我的实际应用程序时创建的实例不同。我相信这是因为它是我正在创建的一个新组件...
我在这里做错了什么?
我看了很多不同的网站,并遵循很多教程,但只是没有点击这个依赖注入。
答
我相信这是因为它是我创建一个新的组件......
你是绝对正确的。每个依赖关系图中单身人士是独一无二的。在创建第二个组件时,您基本上会创建第二个依赖关系图,该图对于该单例组具有不同的对象。
解决办法有两个:
- 在您的应用程序只创建一个图表,其中包括的lib模块
- 在你创建一个图形的lib,然后你的应用程序模块(S)添加到它(如在:https://github.com/google/dagger/tree/master/examples/android-activity-graphs(他们添加“每个活动”模块,但你会明白))
我需要能够注入模块到我的库中的类。如果我有一个在我的库中创建的组件(可能是某种单例),然后传入我的应用程序组件中,然后使用它的这个实例呢? – StuStirling
据我了解,你需要类似于: '@Component(dependencies = LibraryComponent.class,modules = MyAppModule.class)'为你的应用程序组件。这样你的应用程序组件将包含lib组件,并且能够使用它的对象(这基本上是选项2的含义)。 – Ognyan
我要链接你自己的问题,我刚刚发现帮助我解决了这个问题。 http://stackoverflow.com/questions/31354735/how-to-migrate-missing-inject-from-module-with-complete-false-from-dagger-1-to这正是我需要的。 – StuStirling