最近我一直在用匕首挣扎,在追赶了一点后,我陷入了仿制药的困境。我有几个片段,每个片段都注入了自己的演示者。我想将注入提取到BaseFragment类,而不是:
1:不得不打电话:
((App) getActivity().getApplication()).getComponent().inject(this);
来自每个片段的
2:在每个片段类中注册具体的presenter字段
3:在组件中为每个具体的片段添加单独的inject()方法
我的主要组件如下:
@AppScope
@Component(modules = {...})
public interface ApplicationComponent {
void inject(BaseFragment<BasePresenter> baseFragment);
void inject(FeedFragment baseFragment);
void inject(XYZFragment xyzFragment);
...
我尝试过添加这些
void inject(Class<? extends BaseFragment> aClass);
和
<TPresenter extends BasePresenter> void inject(BaseFragment<TPresenter> tPresenterBaseFragment);
但每个变体在编译时都给我相同的信息:
error: Type parameters must be bounded for members injection
我查了一下,发现自Dagger 2.0以来支持泛型,我搜索了this,但无济于事
我的BaseFragment目前看起来像这样
public abstract class BaseFragment<TPresenter extends BasePresenter> extends Fragment implements
BaseView {
TPresenter presenter;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((App) getActivity().getApplication()).getComponent().inject((BaseFragment) this);
}
任何解决方案或解决方法我如何才能在ApplicationComponent中完成BaseFragment的一个注入方法,并且只有一个在BaseFragment上调用它,将不胜感激