我明白,用匕首2我不能注入基类,并期望它继承到子类。但是为什么我不能在子类中调用注入,除非我明确指出该类的方法是inject
?匕首2注入子类
我试过以下这篇文章中的例子:Dagger 2: Even Sharper, Less Square。这个解决方案应该允许我在一个子类中调用注入,但是当我测试它时,我得到了一个NullPointerException
用于我所有的@Inject
目标。
public abstract class BaseFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
injectComponent(MyApplication.getComponent());
}
protected abstract void injectComponent(AppComponent component);
}
public class MyFragment extends BaseFragment {
@Inject MyDependency mDependency;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mDependency.doSomething(); // NullPointerException
...
}
...
@Override
public void injectComponent(AppComponent component) {
component.inject(this);
}
}
是否有另一种方法注入到每个子类中,而无需为每个类创建注入方法?或者这是Dagger 2的唯一方法吗?如果是这样的话,我最终会得到一个荒谬的长课程Component
。随着每一个Activity
,Fragment
或其他各种辅助类的注射方法:
@Singleton @Component(modules = {AppModule.class})
public interface AppComponent {
void inject(MyClass clazz);
void inject(MyClass2 clazz);
...
void inject(MyClassN clazz);
}
我宁愿有来电component.inject()
在每一个类,不是必须做的,随着另一inject
方法。
虽然相似,我不相信我的问题是重复的Dagger 2 Activity Injection Not Working。这个问题问为什么注射不起作用,答案是:因为Dagger 2有很强的类型联系,你必须为每个类别声明一个inject
方法。这个问题更侧重于围绕样板,而希望保持强大的类型关联。
就我所了解的Dagger2而言,你的假设是正确的,即它只对每个要注入值的类都使用注入方法。据我所知,建议的解决方案是创建许多范围内的组件,提供特定活动/片段或应用程序的一部分所需的内容。希望helpss –
可能重复[匕首2活动注射不工作](http://stackoverflow.com/questions/29367921/dagger-2-activity-injection-not-working) –
@MikaelOhlson这是令人沮丧的,考虑到我有目前大约有三十个片段,其中大部分依赖于“Retrofit”客户端。更不用说任何类可能需要的所有其他依赖。 – Bryan