Объявите универсальный метод провайдера в dagger2

У меня есть это обеспечивает метод в моем модуле в кинжале 2:

@Provides
ArrayAdapter<String> arrayAdapter(Context context) {
    return new ArrayAdapter<>(context,R.layout.spinner_item);
}

и я внедряю его моим конструктором адаптера:

@Inject
public ReportMarhaleAdapter(ArrayAdapter<String> arrayAdapter) {
    detailMains = new ArrayList<>();
    ciExecStatus = new ArrayList<>();
    spinnerCiStatusAdapter = arrayAdapter;
}

Можно ли использовать универсальный метод предоставления в кинжале, как это:

@Provides
ArrayAdapter<T> arrayAdapter(Context context) {
    return new ArrayAdapter<>(context,R.layout.spinner_item);
}

и я объявляю тип T в инжекторе конструктора. например:

 @Inject
public ReportMarhaleAdapter(ArrayAdapter<Object> arrayAdapter) {
    detailMains = new ArrayList<>();
    ...

1 ответ

Я не кинжал про, но использование @Named может быть лучше, чем быть общим.

@Provides
@Named("SomethingXToBeProvided")
ArrayAdapter<String> arrayAdapterX(Context context) {
    return new ArrayAdapter<>(context,R.layout.spinner_item);
}

@Provides
@Named("SomethingYToBeProvided")
ArrayAdapter<String> arrayAdapterY(Context context) {
    return new ArrayAdapter<>(context,R.layout.spinner_item);
}

затем

@Inject
public ReportMarhaleAdapter(
    @Named("SomethingXToBeProvided") ArrayAdapter<Object> arrayAdapterX, 
    @Named("SomethingYToBeProvided") ArrayAdapter<Object> arrayAdapterY) {
    ...
}
Другие вопросы по тегам