Объявите универсальный метод провайдера в dagger2 - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть метод предоставляет в моем модуле в кинжале 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 Ответ

0 голосов
/ 24 декабря 2018

Я не кинжал, но использование @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) {
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...