使用覆盖模块扩展ObjectGraph

Pav*_*dka 16 java android dependency-injection dagger

我现在和Dagger一起玩,显然有些功能对我不起作用.

我实际上试图ObjectGraph.plus()用mock模块扩展我的ObjectGraph(via ),它覆盖了已经创建的图形中的一个真实模块.但显然我的模拟模块被忽略了,因此调用了真正的接口.

但是,如果我尝试在图形创建阶段提供我的模拟模块 - 一切正常..

在我的情况下MockModule1覆盖提供者RealModule1

不起作用:

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

objectGraph = objectGraph.plus(new MockModule1());
Run Code Online (Sandbox Code Playgroud)

工作良好

objectGraph = ObjectGraph.create(new RealModule1(), 
                                 new RealModule2(), 
                                 new RealModule3(),
                                 new MockModule1());
Run Code Online (Sandbox Code Playgroud)

RealModule1.java

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

    @Provides
    ISomething provideSomething() {
        return new Something();
    }
}
Run Code Online (Sandbox Code Playgroud)

MockModule1.java

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

    @Provides
    ISomething provideSomething() {
        return new MockSomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Jak*_*ton 21

.plus()是两个对象图的联合.第一个作为扩展点提供,右侧是使用传入的模块实例隐式创建的.

overrides=true 允许模块覆盖同一对象图中提供的其他依赖项.

在扩展对象图时,覆盖将不起作用,因为它实际上不是覆盖(至少不是我们定义它的方式).在内部,我们一直在松散地提到你描述为"阴影"的行为,这是Dagger目前不支持的即将发布的v1.2版本.