【发布时间】:2014-06-03 13:43:49
【问题描述】:
我正在尝试将 Dagger 用于我的 android 项目,但我遇到了一个问题:是否可以混合使用构造函数和字段注入? 我有一个模块和两个类:
@Module(injects = fooActivity.class)
public class Module {
private fooActivity activity;
public Module(fooActivity activity) {
this.activity = activity;
}
@Provides
public bar provideBar() {
return new bar(activity);
}
}
public class fooActivity extends Activity {
@Inject Baz baz;
public void onCreate(Bundle savedInstanceState) {
...
ObjectGraph graph = ObjectGraph.create(new BasicModule()).plus(new Module(this));
graph.inject(this);
}
}
public class bar {
@Inject Baz baz;
@Inject FooActivity activity;
public bar(FooActivity activity) {
this.activity = activity;
}
}
问题是注入后类“Bar”中的“baz”始终为空。但是,如果我不使用提供方法而只使用字段注入并处理“模块”中的所有依赖项,它就可以工作。 所以在我看来,有三种可能: 1) 仅进行字段注入并处理模块类中的所有依赖项。 2) 只进行构造函数注入,并将所有依赖项作为构造函数参数。 3) 混合两者,但在构造函数中对 ObjectGraph 对象调用 .inject(this) 以满足带有 @Inject 注释的字段。
这是正确的吗?
编辑: 我不能使用完整的构造函数注入,因为在另一个模块中声明了“baz”。编辑示例。
@Module(includes = Module.class)
public class BasicModule {
@Provides
public baz provideBaz() {
return new baz();
}
}
【问题讨论】:
标签: android dependency-injection dagger