为了账号安全,请及时绑定邮箱和手机立即绑定

Dagger 2 无法进行构造函数注入

Dagger 2 无法进行构造函数注入

ibeautiful 2021-09-29 15:16:08
我有一个应用程序,其中包含通过 dagger 2 注入的依赖项的活动和片段,我能够在活动和片段中进行字段注入,但无法在其他类中进行构造函数注入。这是我的相关代码@Modulepublic abstract class MainFragmentProvider {  @ContributesAndroidInjector(modules = HomeFragmentModule.class)  abstract HomeFragment provideHomeFragmentFactory();}和@Modulepublic class HomeFragmentModule {...@Provides static HomePresenter provideHomePresenter(HomeView homeView, HomeInteractor homeInteractor) {    return new HomePresenter(homeView, homeInteractor); }如何编写代码以便我可以通过构造函数注入直接在 HomePresenter 中获取依赖项,而不是在模块中编写 provideMethods。我这样做是因为每次我想在这种情况下更改构造函数参数时,我也需要更改模块代码。我怎样才能在 HomePresenter 的构造函数中做这样的事情?@Injectpublic HomePresenter(HomeView homeView, HomeInteractor homeInteractor) {    this.homeInteractor = homeInteractor;    this.homeView = homeView;}
查看完整描述

2 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

要注入构造函数,Dagger 必须知道从哪里获取传递给它的参数,即您必须提供 HomeView homeView, HomeInteractor homeInteractor


因此,还要创建用于提供其他依赖项的方法:


@Provides

 static HomeView provideHomeView() {

    return ...

 }


@Provides

 static HomeInteractor provideHomeInteractor() {

    return ...

 }


查看完整回答
反对 回复 2021-09-29
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

我对 dagger 2 的 android 扩展了解不多,但据我所知,有两种方法可以实现您正在寻找的结果。


在相关组件中,您可以使用您的类型指定一个方法:


interface SomeComponent {

  HomePresenter presenter(); // Method name does not matter here, only the type

}

并像这样访问它


class Home {

  HomePresenter presenter;


  void initialize() { //This could be your onCreate or wherever you typically inject

    presenter = getSomeComponent().presenter();

  }

}

或者,如果您为 Home 对象指定了一个注入方法,则可以请求它:


interface SomeComponent {

  void inject(Home home);

}


class Home {

  @Inject HomePresenter presenter;


  void initialize(){

    getSomeComponent().inject(this);

  }

}

在这两种情况下,您都必须确保Component包含适当的Modules。


查看完整回答
反对 回复 2021-09-29
  • 2 回答
  • 0 关注
  • 171 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信