Инъекция в супертип dagger2 - PullRequest
0 голосов
/ 30 января 2019

Можно ли внедрить в супертипы в Dagger 2?

, если у меня есть такое свойство

@Inject
Wallet<Material>

Будет ли работать следующее:

@Provides
Wallet<LeatherMaterial> provide()
{
return new Wallet<LeatherMaterial>
}

На самом деле я должен был перефразировать вопрос.Это не работает, и я получаю ошибку, которая требует инъекции точного кошелька

Есть ли у нас какие-либо обходные пути?,koin предоставляет такую ​​функциональность, как эта?

1 Ответ

0 голосов
/ 30 января 2019

Да, вам нужно быть явным.Добавьте следующее в свой модуль, если у вас уже есть Wallet<LeatherMaterial> в вашем графике зависимостей где-то:

@Binds abstract Wallet<Material> provide(Wallet<LeatherMaterial> leatherWaller);

В противном случае используйте:

@Provides static Wallet<Material> provide() {
    return new Wallet<LeatherMaterial>(){ /* ... */ };
}

Редактировать: Возвращаясь к этому ответу, потому что мне пришло в голову, что решения, которые я предоставил, не будут работать из-за того, как дженерики обрабатываются в Java.Вместо этого вам нужно будет использовать:

Wallet<? extends Material> вместо Wallet<Material> в моих вышеприведенных ответах и ​​делать то же самое, где бы оно ни вводилось.

...