当前位置: 首页 > 知识库问答 >
问题:

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

章侯林
2023-03-14

我刚刚了解了依赖注入(DI),我开始喜欢它了。为了注入依赖关系,我使用了GoogleGuice框架。一切在概念上运行良好,但在编写模块时,我想到了一个想法:如果我的模块需要依赖项作为构造函数,那该怎么办?毕竟,它只是一个扩展抽象模块的类。所以,基本上,我有三个模块作为一个整体。

>

  • 环境模块

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

    服务模块

    public class ServiceModule extends AbstractModule {
       private final boolean isEnabled;
       @Override 
       protected void configure() {
       if (isEnabled) {
       install (new ThirdModule());
       }
    }
    
      < li >第三个模块(它不接受任何构造函数中的任何参数,并且有自己的一些绑定)

    基本上,服务模块中的变量定义了我的应用程序是否需要安装第三个模块。该变量在应用程序配置文件中定义。那么,如何在服务模块中注入该变量呢?由于现场是最终的,因此不可能进行设置器注入,是否有办法使用构造注入或现场注入来注入值。

  • 共有1个答案

    宣冥夜
    2023-03-14

    我看到以下选项:

    > < li>

    使用系统变量:

    < code > service module(){ is enabled = system . getproperty(" isThirdModuleEnabled ")};

    使用@Provides:

    < code >类ServiceModule...{ @ Provide @ Singleton ThirdModuleParam getThirdModuleParam(...){//读取配置文件ThirdModuleParam RES = new ThirdModuleParam();res.setIsEnabed(...);返回res} } class third module { @ Provide somethidmoduleclass getIt(ThirdModuleParam){ return param . is enabled()?new SomeThirdModuleClass():null;}

     类似资料:
    • 我需要重构现有的抽象类来实现依赖注入,但是这个类有两个接受其他参数的构造函数。 我需要注入一些接口,并避免在构造函数中传递任何其他参数,如“settingsId”和“Setting”。所以我的想法是在创建此类的实例后创建两种方法来设置这些参数。 但它看起来不是一个合适的解决方案,因为如果开发人员忘记在创建实例后运行这些方法之一,我们将来可能会得到一个异常(对象未设置为引用...)。我应该如何正确执

    • 问题内容: 我已经用策略模式实现了一个程序。所以我有一个在某些地方使用的接口,并且可以替换具体的实现。 现在我要测试该程序。我想以类似的方式做。编写一次测试,针对该接口进行测试。应在测试开始时注入具体的接口实现,以便我可以轻松地替换它。 我的测试类看起来与此类似: 在开始测试时,必须使用参数化的构造器来注入具体的策略实施。 现在我没有让TestNG运行它并注入具体的实现实例。我试图与继承几种方法,

    • 我正试图在计算机上实现这个例子https://developer.android.com/jetpack/docs/guide.这就解释了Android应用程序的结构。 当我使用相同的代码时,我会出现以下错误。 我可以找出这个错误与 当我为ViewModel编写默认的零输入构造函数时,我得到了以下错误。 我想不出这个错误的原因和解决方法。

    • 问题内容: 我发现我的构造函数开始看起来像这样: 不断增加的参数列表。由于“容器”是我的依赖项注入容器,所以为什么我不能这样做: 每堂课?不利之处是什么?如果执行此操作,则感觉就像我在使用精美的静态方法。请分享你对IoC和依赖注入疯狂的想法。 问题答案: 正确的是,如果将容器用作服务定位器,则它或多或少是光荣的静态工厂。由于种种原因,我认为这是一种反模式。 构造函数注入的奇妙好处之一是,它使违反单

    • 通常,我会使用在中启动mock。 我怎样才能做到这一点?到目前为止,我不想在构造函数中注入,因为它会混合业务参数和依赖项。

    • 在之前的所有JUnit版本中,测试构造函数或方法都不允许有参数(至少不能使用标准的Runner实现)。作为JUnit Jupiter的主要变化之一,测试构造函数和方法现在都允许有参数。这带来了更大的灵活性,并为构造函数和方法启用依赖注入。 ParameterResolver定义了测试扩展的API,希望在运行时动态解析参数。如果测试构造函数或@Test, @TestFactory, @BeforeE