Android 匕首2依赖注入

Android 匕首2依赖注入,android,dependency-injection,dagger-2,Android,Dependency Injection,Dagger 2,我正在尝试创建一个Android库,与另一个项目一起使用Dagger2学习DI。事实证明,这比预期的要困难得多 我的问题 我试图使用一个名为MySingleton的单例类,我想从我的Android库和主应用程序中访问它 当前设置 基本上,我在Android库项目中有一个名为MySingleton的单例类。在这个项目中,我有一个名为SingletonModule的类,它是一个Dagger2模块,提供了我的singleton @Provides @Singleton MySingleton prov

我正在尝试创建一个Android库,与另一个项目一起使用Dagger2学习DI。事实证明,这比预期的要困难得多

我的问题

我试图使用一个名为
MySingleton
的单例类,我想从我的Android库和主应用程序中访问它

当前设置

基本上,我在Android库项目中有一个名为
MySingleton
的单例类。在这个项目中,我有一个名为
SingletonModule
的类,它是一个Dagger2模块,提供了我的singleton

@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);
这很好,我通过field注入的
MySingleton
实例运行良好

我尝试过的

在我的Android库项目中,我创建了一个名为
SingletonComponent
的新组件,它与
ApplicationComponent
的功能相同,只是提供了
MySingleton
对象。然后在扩展
服务的
MyService
类中,我按字段注入了
MySingleton
对象。这没有我想要的效果。它确实是一个
MySingleton
对象,但它与注入实际应用程序时创建的实例不同。我相信这是因为这是我正在创建的一个新组件

我做错了什么

我看过很多不同的网站,也听了很多教程,但有些东西就是没有点击这个依赖注入

我相信这是因为这是我正在创建的一个新组件

你完全正确。每个依赖关系图的单例是唯一的。当创建第二个组件时,您实际上是在创建第二个依赖关系图,该依赖关系图对该单例具有不同的对象

有两种解决方案:

  • 在应用程序中仅创建一个包含lib模块的图形
  • 在你的库中创建一个图表,然后将你的应用程序模块添加到其中(比如:(他们在那里添加了“每个活动”模块,但你会明白的))

  • 我需要能够将模块注入到库中的类中。如果我有一个在我的库中创建的组件(可能是某种单例组件),然后将其传递到我的应用程序组件中,然后使用它的实例,该怎么办?据我所知,您将需要类似这样的东西:
    @component(dependencies=LibraryComponent.class,modules=MyAppModule.class)
    用于您的应用程序组件。这样,您的应用程序组件将包括lib组件,并且能够使用其对象(这基本上就是选项2的含义)。我将链接您自己的问题,我刚刚发现它帮助我解决了这个问题。这正是我需要的。