gpt4 book ai didi

java - 使用覆盖模块扩展 ObjectGraph

转载 作者:IT老高 更新时间:2023-10-28 23:32:36 24 4
gpt4 key购买 nike

我现在正在玩 Dagger,显然有些功能不适合我。

我实际上是在尝试使用模拟模块扩展我的 ObjectGraph(通过 ObjectGraph.plus()),该模拟模块会覆盖已创建图形中的一个真实模块。但显然我的模拟模块被忽略了,所以调用了真正的接口(interface)。

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

在我的例子中 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();
}
}

我错过了什么吗?

最佳答案

.plus() 是两个对象图的并集。第一个作为扩展点提供,权限通过传入的模块实例隐式创建。

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

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

关于java - 使用覆盖模块扩展 ObjectGraph,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20061601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com