在 Dagger 1 中,我有一个基类设置,它可以处理创建范围图并将依赖项注入当前对象。例如...
public abstract class MyBaseActivity extends Activity {
private ObjectGraph graph;
protected void onCreate(Bundle savedInstanceState) {
graph = ((MyApp) getApplication()).plus(getModules());
graph.inject(this);
}
protected Object[] getModules();
}
public class MyClass extends MyBaseActivity {
@Inject SomeDep someDep;
@Override
protected Object[] getModules() {
return new Object[/* Contains a module that provides SomeDep */];
}
}
这允许每个子类在标准应用程序模块之外补充他们自己的模块集。
在玩过 Dagger 2 之后,似乎无法处理类似的情况......
public abstract class MyBaseActivity extends Activity {
private MyBaseActivityComponent component;
protected void onCreate(Bundle savedInstanceState) {
component = ((MyApp) getApplication()).component().plus(/* Can not accept an array */);
component.inject(this);
}
}
我通过修改 MyBaseActivityComponent 来解决上述问题,以便列出它可能使用的所有可能模块......
@Subcomponent(modules = {
Module1.class,
Module2.class
})
public interface MyBaseActivityComponent {
public void inject(MyBaseActivity activity);
}
所以现在我可以做这样的事情......
public abstract class MyBaseActivity extends Activity {
private MyBaseActivityComponent component;
protected void onCreate(Bundle savedInstanceState) {
component = ((MyApp) getApplication()).component().plus(new Module1(), new Module2());
component.inject(this);
}
}
但是现在我遇到了一个问题,注入将注入 MyBaseActivity 的依赖项,而不是它的子类。建议?