Dagger 2 : Unbounded dependency injection

206 Views Asked by At

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.

0

There are 0 best solutions below