Dagger 2 - внедрение зависимостей с провайдером <T> - PullRequest
0 голосов
/ 12 марта 2019

У меня есть класс, который имеет одно абстрактное поле члена.

public class Editor implements PropertyEditor {

    @Inject
    AbstractEditor editor;

    @Inject
    public Editor() {
    }

    (...)
}

Используя интерфейс кинжала и провайдера, я хотел бы создать два разных объекта и внедрить другую реализацию AbstractEditor, что-то вроде этого:

@Singleton
public class EditorFactory {

    @Inject 
    Provider<Editor> numericEditorProvider;

    @Inject 
    Provider<Editor> textEditorProvider;

    (...)

    static WidgetCreator INTEGER = new WidgetCreator(EditorType.INTEGER) {

        @Override
        public PropertyEditor create(EditorFactory factory) {
            return factory.numericEditorProvider.get();
        }
    };

    static WidgetCreator STRING = new WidgetCreator(EditorType.STRING) {

        @Override
        public PropertyEditor create(EditorFactory factory) {
            return factory.textEditorProvider.get();
        }
    };
}

Есть ли способ передать конкретный экземпляр AbstractEditor каждому редактору? INTEGER должен предоставить IntegerEditor, а STRING должен защитить StringEditor.

IntegerEditor extends AbstractEditor

StringEditor extends AbstractEditor
...