android-Dagger 2组件链依赖性
作者:互联网
我有3个组成部分:
主要应用组件:
@Singleton
@Component(modules = {AppModule.class, UserModule.class, DatabaseModule.class})
public interface AppComponent {
Context getContext();
DatabaseHelper getDatabaseHelper();
UserManager getUserManager();
}
存储库组件:
@DataScope
@Component(dependencies = AppComponent.class, modules = CategoryRepositoryModule.class)
public interface CategoryRepositoryComponent {
CategoryRepository getCategoryRepository();
}
和屏幕组成:
@MenuScope
@Component(dependencies = CategoryRepositoryComponent.class, modules = {MenuModule.class, DrawerModule.class})
interface MenuComponent {
void inject(MenuActivity activity);
}
问题是我的MenuComponent无法看到提供AppComponent的依赖项.但是MenuComponent取决于CategoryRepositoryComponent,而CategoryRepositoryComponent取决于AppComponent,因此MenuComponent应该看到AppComponent(MenuComponent-> CategoryRepositoryComponent-> AppComponent).
如果我将吸气剂添加到CategoryRepositoryComponent
@DataScope
@Component(dependencies = AppComponent.class, modules = CategoryRepositoryModule.class)
public interface CategoryRepositoryComponent {
CategoryRepository getCategoryRepository();
DatabaseHelper getDatabaseHelper();
UserManager getUserManager();
}
但是,多数民众赞成在看起来不正确,重复.您知道如何以干净,正确的方式解决此问题吗?
谢谢,
缺口.
解决方法:
您的方法是正确的.组件只能访问其直接父组件显式公开的类型.
作为父母,当您不想将所有依赖项公开给任何依赖您的人时,这很有用.例如,父级可能依赖BankComponent而不希望向其子级公开BankAccount.
另一种方法是使用子组件.该文档和其他答案将有助于您理解:Dagger 2 subcomponents vs component dependencies.
标签:components,dagger-2,dependency-injection,android 来源: https://codeday.me/bug/20191026/1937752.html