在多个Android模块之间共享1个依赖关系实例

时间:2018-05-04 17:00:44

标签: android dagger-2

我正在尝试将我的应用程序分解为多个库并利用Dagger2来注入依赖项。首先,我将应用程序分解为2个Android模块。登录发生在App模块中,其他所有内容都在Core库中。

App结构目前看起来像这样:

Android Application
├── App Module (Only has login)
|   └── Core Library
├── Core Library
|   └── Networking library
    └── Cert Pinning Library
└── Networking Library
└── Cert Pinning Library

我想在App模块和Core库之间共享网络库和cert pinning库的相同实例。

我的Dagger文件如下所示:

   //AppComponent
   @Component(modules = { AppModule.class, CoreModule.class CertificatePinnerModule.class, NetworkingModule.class}) @Singleton public interface AppComponent {
     void inject(LoginActivity loginActivity);
     }

    //AppModule
     @Module public class AppModule {}

    //CoreComponent
    @Component(modules = {
        CoreModule.class CertificatePinnerModule.class, NetworkingModule.class
    })        
    @Singleton public interface CoreComponent {
    //a bunch of injection locations
    }


    //CoreModule
    @Module public class CoreModule {}

    //CertPinnerModule
    @Module public class CertificatePinnerModule {}

    //NetworkingModule
    @Module public class NetworkingModule {}

    //NetworkingSupportComponent
    @Component(modules = {NetworkingModule.class,     
    CertificatePinnerModule.class}) @Singleton
    public interface NetworkingSupportComponent {

    }

    //Application class
    public class Application extends Application {  
      private AppComponent component;  

      @Override public void onCreate() {
        super.onCreate();
     CoreModule coreModule = new CoreModule(this);
        CoreInjector.init(coreModule); //DaggerCoreComponent builder
    component = DaggerAppComponent.builder().coreModule(coreModule).appModule(getAppModule()).build();
    NetworkingSupport.init(this); //DaggerNetworkingSupportComponent builder
 }
 }

目前,此代码已编译,但App模块和Core库使用NetworkingModule和CertificatePinnerModule的不同实例。我尝试将AppComponent修改为如下所示:

@Component(modules = { AppModule.class }, dependencies = { CoreComponent.class }) @Singleton public interface AppComponent {

但由于App Module无法看到CoreModule中定义的提供程序,因此无法编译。

如果有人能帮助我,我会非常感激。

0 个答案:

没有答案