Dagger 2 Inject generic interface implementations

Viewed 889

I would like to inject implementations of my generic interface via constructor.

This is my interface

public interface BaseValidator<T> {
    boolean isValid(T t);
}

First Implementation

public class FirstValidator implements BaseValidator<String> {

@Override
public boolean isValid(String string) {
    // code here
}

Second Implementation

public class SecondValidator implements BaseValidator<Int> {

@Override
public boolean isValid(Int int) {
    // code here
}

My provides in validation module

@Provides
@Singleton
@Named("FirstValidator")
public BaseValidator<String> provideFirstValidator(){
    return new FirstValidator();
}

@Provides
@Singleton
@Named("SecondValidator")
public BaseValidator<Int> provideSecondValidator(){
    return new SecondValidator();
}

And then when I try to inject it like this

private BaseValidator<String> mFirstValidator;

@Inject
public MainPresenter(@Named("FirstValidator") BaseValidator<String> firstValidator) {
    this.mFirstValidator = firstValidator;
}

It throws error

error: [dagger.android.AndroidInjector.inject(T)] BaseValidator<java.lang.String> cannot be provided without an @Provides-annotated method.

How can I inject my implementations of generic interface to any class?

0 Answers
Related