在我的代码中有一个第三方guice绑定,我需要覆盖才能正常工作。 (让我们将它命名为InterfaceToBeOverridden.class) 为了安全起见,这没有改变并且工作正常,我想测试时要求喷油器 实际上,InterfaceToBeOverridden实例返回虚拟类的实例 问题是此布线安装在专用模块中。 使用Guice实现这一目标的最佳方法是什么?
代码如下所示:
public MainModule extends AbstractModule {
@Override
protected void configure() {
// install a lot of prod modules
install(new MyChildModule())
}
}
public MyChildModule extends PrivateModule {
@Override
protected void configure() {
// install some stuff that also needs parent bindings
install(Modules.override(new ThirdPartyWiringModule(), new MyDummyOverrideModule()));
expose(SomeClassUsingThirdPartyDependencies)
}
}
public MyDummyOverrideModule extends AbstractModule {
@Override
protected void configure() {
bind(InterfaceToBeOverridden.class).to(DummyImplementation.class);
}
}
这里的核心问题是我无法从父注入器访问该类,因为它位于子范围内 无法创建私有模块本身的注入器,因为它需要父进程的绑定。所以两个 以下方法会失败。
@Test
public void test() {
Injector injector = createInjector(new MainModule());
assertEquals(injector.getInstance(InterfaceToBeOverwritten.class).getClass(), DummyImplementation.class);
}
@Test
public void test() {
Injector injector = createInjector(new ChildModule());
assertEquals(injector.getInstance(InterfaceToBeOverwritten.class).getClass(), DummyImplementation.class);
}