gpt4 book ai didi

java - 在 Guice 中构造对象时为字段提供对象

转载 作者:行者123 更新时间:2023-12-02 06:01:32 25 4
gpt4 key购买 nike

假设我有 Z 类,它注入(inject) A 类:

class Z {
@Inject
public Z(.., A arg, ..) {
..
}
}

假设 A 类有这个构造函数:

@Inject
public A(B arg0, C arg1, D arg2) {
...
}

我希望注入(inject)能够正常工作,除非在特殊情况下,我想提供其中一个参数。例如,使用 C 类的 cObject 构造 A。请注意,A 本身是使用 Z 构造的。

我想要这个是因为我正在为 Z 编写功能测试,我想根据测试提供不同类型的假货。一个测试文件将仅包含一种 B、C 或 D 的伪造品。

最佳答案

我建议使用Modules.override这里有关于其用于功能测试的文档。谨慎使用它,否则事情可能会变得非常困惑且难以理解,但它看起来像这样:

@Before
public void createInjector() {
this.injector = Guice.createInjector(
Modules.override(new YourZABCDModule()).with(new AbstractModule() {
@Override public void configure() {
bind(B.class).to(FakeB.class);
}
}));
}

或者,如 Modules.override 文档中所述,只需使用较小的模块来实现更细粒度的组合:

@Before
public void createInjector() {
this.injector = Guice.createInjector(
new ZAModule(),
new FakeBModule(),
new CModule(),
new DModule());
}

关于java - 在 Guice 中构造对象时为字段提供对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22625754/

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