我读过构造函数注射不需要模块。 所以我有这个问题。
如果我有这个构造函数注入:
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 presenter;
@Inject
public RealmModel(Presenter presenter) {
this.presenter = presenter;
}
谢谢
答案 0 :(得分: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
答案 1 :(得分:0)
您有两种选择:
Model
注释@Inject
的构造函数,在presenter构造函数中传递realmModel
时执行此操作
构造函数将被调用。我更喜欢使用模块,但这只是我的意见。