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

我有一个应用程序,其中包含通过 dagger 2 注入的依赖项的活动和片段,我能够在活动和片段中进行字段注入,但无法在其他类中进行构造函数注入。这是我的相关代码


@Module

public abstract class MainFragmentProvider {

  @ContributesAndroidInjector(modules = HomeFragmentModule.class)

  abstract HomeFragment provideHomeFragmentFactory();

}


@Module

public class HomeFragmentModule {

...

@Provides

 static HomePresenter provideHomePresenter(HomeView homeView, HomeInteractor homeInteractor) {

    return new HomePresenter(homeView, homeInteractor);

 }

如何编写代码以便我可以通过构造函数注入直接在 HomePresenter 中获取依赖项,而不是在模块中编写 provideMethods。我这样做是因为每次我想在这种情况下更改构造函数参数时,我也需要更改模块代码。


我怎样才能在 HomePresenter 的构造函数中做这样的事情?


@Inject

public HomePresenter(HomeView homeView, HomeInteractor homeInteractor) {


    this.homeInteractor = homeInteractor;

    this.homeView = homeView;


}


ibeautiful
浏览 174回答 2
2回答

慕娘9325324

要注入构造函数,Dagger 必须知道从哪里获取传递给它的参数,即您必须提供 HomeView homeView, HomeInteractor homeInteractor因此,还要创建用于提供其他依赖项的方法:@Provides static HomeView provideHomeView() {    return ... }@Provides static HomeInteractor provideHomeInteractor() {    return ... }

幕布斯6054654

我对 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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java