Как ввести с помощью интерфейса в dagger2 - PullRequest
0 голосов
/ 05 февраля 2019

Учитывая следующую структуру:

public class WaterWorld implements IWorld {

    ...
    @Inject
    CreationMode creationMode;

    @Override
    public final void init() {
        WorldModule.getComponent().inject(this);
    }
    ...
}

Возможно ли для WaterWorld получить зависимости, если Component имеет следующую структуру:

    void inject(IWorld world);

Я получаю ноль, этопуть.Однако, если я попытаюсь сделать это в следующем

    void inject(WaterWorld world);

, то это сработает.Тем не менее, у меня есть много классов, реализующих IWorld.Я хотел сделать это следующим образом: void inject(IWorld world); Как это сделать, или есть какое-то другое общее решение?

1 Ответ

0 голосов
/ 05 февраля 2019

Нет, Dagger всегда вводит класс, указанный в методе inject(Foo foo).Он будет внедрять объекты в родительские типы, но он будет не внедрять объекты в подклассы.
Dagger использует тип, указанный для генерации кода для внедрения, но если вы не укажете конкретный класс, тогдаКинжал просто не знает об этом и не вводит свои поля.

Примечание: Вы не приводите никакого конкретного примера, но похоже, что вы могли бы очень хорошо использовать конструкторвпрыск вместо этого, который не требует ручного впрыска или инъекции методов в вашем компоненте.Если у вас есть несколько реализаций одного и того же интерфейса, вы можете даже взглянуть на несколько привязок с помощью Dagger.

...