如果你的模块本身作为构造函数接受参数,如何注入依赖项?

时间:2017-08-31 16:55:48

标签: java dependency-injection guice

我刚刚了解了依赖注入(DI),我开始喜欢它了。要注入依赖项,我使用的是Google Guice框架。一切都在概念上运行良好,但在编写模块时,我想到了一个想法,如果我的模块需要依赖项作为构造函数,毕竟,它只是一个扩展AbstractModule的类。 所以,基本上,我有3个模块作为一个整体。

  • 环境模块

    public class EnvModule extends AbstractModule {
          @Override 
          protected void configure() {
          install(new Servicemodule());
        }
    }
    
  • ServiceModule

    public class ServiceModule extends AbstractModule {
       private final boolean isEnabled;
       @Override 
       protected void configure() {
       if (isEnabled) {
       install (new ThirdModule());
       }
    }
    
    • ThirdModule(它在任何构造函数中都没有任何参数,并且有自己的一些绑定)

基本上,服务模块中的变量定义我的应用程序是否需要安装第三个模块。该变量在应用程序配置文件中定义。那么如何在ServiceModule中注入该变量?由于该领域是最终的,因此无法进行二次注入,是否有办法使用施工注入或现场注入来注入该值。

1 个答案:

答案 0 :(得分:2)

我看到以下选项:

  • 使用系统变量:

    ServiceModule() {isEnabled = System.getProperty("isThirdModuleEnabled")};

  • 直接在ServiceModule()构造函数
  • 中读取配置文件
  • 使用@Provides:

    class ServiceModule ... { @Provide @Singleton ThirdModuleParam getThirdModuleParam(...) { //read the config file ThirdModuleParam res = new ThirdModuleParam(); res.setIsEnabed(...); return res; } } class ThirdModule { @Provide SomeThirdModuleClass getIt(ThirdModuleParam param) { return param.isEnabled() ? new SomeThirdModuleClass() : null; }