其他分享
首页 > 其他分享> > android-Dagger 2组件链依赖性

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