【问题标题】:dagger2 constructor injection how to provide dependency without moduledagger2构造函数注入如何在没有模块的情况下提供依赖
【发布时间】:2017-05-22 15:25:02
【问题描述】:

我读过构造函数注入不需要模块。 所以我有这个问题。

  1. 如果我有这个构造函数注入:

    private Model realmModel;
    
    @Inject
    public MainActivityPresenter(Model realmModel) {
        this.realmModel = realmModel;
    }
    

还有这个组件:

@Singleton
@Component(modules = {AppModule.class})
public interface AppComponent {


    Model realmModel();
    void inject(MainActivity activity);


}

如果在我的 MainActivity 我这样做:

((MyApp)getApplication()).createAppComponent().inject(this);

如何将realmModel 参数传递给演示者构造函数注入?

编辑:这是模型:

 Presenter presenter;

 @Inject
 public RealmModel(Presenter presenter) {
    this.presenter = presenter;

}

谢谢

【问题讨论】:

  • 你这里有一个循环依赖,你应该尝试摆脱它。您的模型取决于演示者,而演示者取决于模型。因此,您也无法进行构造函数注入,因为在没有先创建另一个的情况下,两者都无法创建。您的模型真的需要保留对演示者的引用吗?
  • @DavidMedenjak 不确定,我可以进行回调以将结果处理给演示者,但没有它这行得通吗?

标签: android dependency-injection dagger-2 android-mvp


【解决方案1】:

解决这个问题的三种方法

1) 给出一个提供 Relam 模型的模块

 @Provides
 @Singleton
 public Model providesRealmModel() {
     return new Model();
 }

2) 让你的 RelamModel 类也注入构造函数

class Model {
   @Inject
   public Model() {}
} 

构造注入的技巧是它的所有依赖项也应该被构造函数注入然后它会正常工作。 (根据经验,您的模型需要应用程序上下文。查看 3 选项以了解实现外部依赖项的方法

3) 提供模型作为外部依赖。

 @Module
 public class ModelModule {
    private Model relamModel;
    public ModelModule(Model relamModel) {
       this.relamModel = relamModel
    }
 }

@Component(module={ModelModule.class}) 
public interface ApplicationComponent {
}

看一下扭曲方程式的系列视频,这是我关于 dagger2 的第一个视频教程。我发现它真的很有帮助。希望对你也有帮助 https://www.youtube.com/watch?v=Qwk7ESmaCq0

【讨论】:

    【解决方案2】:

    你有两个选择:

    1. 使用带有提供方法的模块
    2. @Inject注释Model的构造函数,当你在演示者构造函数中传递realmModel时这样做,模型 构造函数将被调用。

    我更喜欢使用模块,但这只是我的意见。

    【讨论】:

    • 所以现在你需要提供一个 Presenter.. 与 Model 相同的步骤
    • Presenter是MainActivityPresenter实现的接口..有可能吗?
    • 所以,你的 mainActivityPresenter 有一个模型,它有一个演示者.. mm 听起来你需要设计那个..
    • 模型引用了presenter来返回数据...否则presenter如何更新视图?
    • 你可以使用一个接口,甚至是一个事件总线。我推荐使用一个接口,看看这个:github.com/matoelorriaga/pokemon。检查view-presenter-interactor(interactor就是你所说的model)
    猜你喜欢
    • 1970-01-01
    • 2018-06-14
    • 2022-01-21
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2020-12-08
    相关资源
    最近更新 更多