java - 是否可以为模块注入(inject)值(value)

标签 java dependency-injection guice

我有一个模块,它使用一个标志来决定是否安装另一个模块。有没有办法通过注入(inject)来实现这一点,或者我是否需要在构造函数中显式传递标志的值?

 public class MyModule implements Module {

    private final Boolean shouldInstallOtherModule;

    @Inject public MyModule(Boolean shouldInstallOtherModule) {
        this.shouldInstallOtherModule = shouldInstallOtherModule;
    }

    public void configure() {
      if(shouldInstallOtherModule) {
       install(SomeOtherModule);       
       }

    }
}

最佳答案

虽然可以注入(inject)模块,或者从注入(inject)器获取模块,但最好的设计决策是:模块可以以有限的方式访问自己的注入(inject)器,因此模块上的 @Inject 方法和字段引入了第二个注入(inject)器,这可能很快就会变得困惑。

在这种情况下,我会单独为配置创建一个注入(inject)器,然后 create a child injector以及基于该配置的模块。您的模块应该负责配置绑定(bind),而不是选择要安装哪些其他模块 - 这是最好留给根应用程序的工作。

如果您觉得必须将条件安装保留在模块中,只需将配置值直接作为构造函数参数,然后让您的顶级对象(创建注入(inject)器)提供它它需要。这将防止两个注入(inject)器同时在同一个对象实例中处于 Activity 状态,这使得一切都更容易理解。

对于类似的问题和解决方案,请参阅这个SO问题:"Accessing Guice injector in its Module?"

关于java - 是否可以为模块注入(inject)值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30051449/

相关文章:

spring - 无法加载资源: the server responded with a status of 406 (Not Acceptable)

java - 使用带有静态绑定(bind)参数的 google guice

c# - 如何使用 IoC 注入(inject)打开的连接

java - 通过松耦合或高耦合来改进我的代码(如果有的话)?

java - 另一个类中的方法不能应用于给定类型

java |将项目添加到列表<?>

java - 告诉低级对象使用哪些工厂的好方法是什么?

java - 掌握 Google Guice

java - 如何使用 Guice @Inject 到现有对象层次结构中?

java - 设置 CLASSPATH 以正确运行 Duke