0

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

  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;

}

谢谢

4

2 回答 2

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

于 2017-07-17T05:11:24.367 回答
0

你有两个选择:

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

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

于 2017-05-22T15:36:20.980 回答