Расширение ObjectGraph с помощью переопределяющего модуля

Я играю с кинжалом прямо сейчас, и, видимо, некоторые из функций не работают для меня.

Я фактически пытаюсь расширить свой ObjectGraph (через ObjectGraph.plus()) модулем mock, который переопределяет один из реальных модулей в уже созданном графе. Но, по-видимому, мой макет модуль игнорируется, поэтому называются реальные интерфейсы.

Однако, если я попытаюсь предоставить модный модуль во время этапа создания графа - все отлично работает.

В моем случае MockModule1 переопределяет поставщиков из RealModule1

Не работает:

objectGraph = ObjectGraph.create(new RealModule1(), 
                                 new RealModule2(), 
                                 new RealModule3());

objectGraph = objectGraph.plus(new MockModule1());

Работает нормально

objectGraph = ObjectGraph.create(new RealModule1(), 
                                 new RealModule2(), 
                                 new RealModule3(),
                                 new MockModule1());

RealModule1.java

@Module(injects = MainActivity.class)
public class RealModule1 {

    @Provides
    ISomething provideSomething() {
        return new Something();
    }
}

MockModule1.java

@Module(overrides=true, injects = MainActivity.class)
public class MockModule1 {

    @Provides
    ISomething provideSomething() {
        return new MockSomething();
    }
}

Я что-то пропустил?

Ответы

Ответ 1

.plus() является объединением двух объектных графов. Первый из них предоставляется как точка расширения, а право неявно создается с помощью экземпляров модуля ввода.

overrides=true позволяет модулям переопределять другие зависимости, предоставляемые внутри одного и того же графа объектов.

Переопределение не будет работать при расширении графа объектов, потому что на самом деле это не будет переопределять (по крайней мере, не так, как мы его определяем). Внутри мы слабо относимся к поведению, которое вы описываете как "затенение", и это то, что кинжал в настоящее время не поддерживает надвигающуюся версию v1.2.