我正在尝试将我的应用程序分解为多个库并利用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中定义的提供程序,因此无法编译。
如果有人能帮助我,我会非常感激。