Lately I've been struggling with dagger, and after catching up a bit, I got stuck with generics. I have several fragments, each getting it's own presenter injected. I want to extract the injection to the BaseFragment class, without :
1: Having to call:
((App) getActivity().getApplication()).getComponent().inject(this);
from every single fragment
2: registering a concrete presenter field in each fragment class
3: adding seperate inject() methods in the component for each concrete Fragment i have
My main component looks like this:
@AppScope
@Component(modules = {...})
public interface ApplicationComponent {
void inject(BaseFragment<BasePresenter> baseFragment);
void inject(FeedFragment baseFragment);
void inject(XYZFragment xyzFragment);
...
I have tried adding these
void inject(Class<? extends BaseFragment> aClass);
and
<TPresenter extends BasePresenter> void inject(BaseFragment<TPresenter> tPresenterBaseFragment);
but each variant gives me the same message at compilation:
error: Type parameters must be bounded for members injection
i have looked up SO, and discovered that generics are supported since Dagger 2.0, and i searched this, but to no avail
my BaseFragment currently looks like this
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);
}
any solution or a workaround how can i accomplish having only one inject method for BaseFragment in the ApplicationComponent, and only one call for it on BaseFragment, would be greatly appreciated.