我有一个 Guice,它的构造函数接受注入的参数:
@Singleton
public class MyClass {
private MyConfiguration myConfiguration;
@Inject
public MyClass(MyConfiguration myConfiguration) {
this.myConfiguration = myConfiguration;
}
}
现在,我希望能够注入参数取决于我运行它的环境。在测试中,我想注入一个 MyConfiguration 对象,而在生产中我想注入另一个对象。
我有两个 MyConfiguration 提供程序。MyConfigurationProvider 读取外部配置文件并从那里获取配置。MyConfigurationTestProvider 只是对所有设置进行硬编码。
我不知道如何配置这个。我尝试在 Guice 模块中进行绑定,例如:
public class MyGuiceModule extends AbstractModule {
@Override
protected void configure() {
bind(MyConfiguration.class).toProvider(MyConfigurationProvider.class).in(Singleton.class);
}
}
并在测试的 Guice 模块中,使用:
public class MyGuiceTestModule extends AbstractModule {
@Override
protected void configure() {
install(new MyGuiceModule());
bind(MyConfiguration.class).toProvider(MyConfigurationTestProvider.class).in(Singleton.class);
}
}
但这给了我一个绑定多个提供者的错误。
我的问题是我如何为同一个对象使用不同的提供者取决于环境?
非常感谢。