【问题标题】:Passing variable parameters to Guice @Provides method将可变参数传递给 Guice @Provides 方法
【发布时间】:2021-03-10 17:47:20
【问题描述】:

我有一个 Guice 模块,它有一个 @Provides 方法,该方法接受 2 个参数并返回接口的两个实现之一

public class ClientModule extends AbstractModule{

    @Override
    protected void configure(){
    
    }
    
    @Singleton
    @Provides
    protected ClientInterfaces provideService(Class1 objectOfClass1, String runTimeGeneratedString){
       if(condition){
            return new firstImplementation();
       } else {
            return new someImplementation(objectOfClass1, runTimeGeneratedString);
       }
    }
}

我已经看到这个问题与我的几乎相似 - Passing parameters to Guice @Provides method 。但是在这里,这个问题的 OP 想要将常量 String 变量传递给 @Provides 方法,而在我的情况下,我想传递一个将在运行时生成的字符串。如何解决这个问题?任何形式的帮助将不胜感激。

谢谢

【问题讨论】:

    标签: java dependency-injection guice guice-3 dropwizard-guice


    【解决方案1】:

    两种可能性,具体取决于您的意思。首先,仍然可以使用常量,但在运行时确定这些常量的值 - 在创建模块之前的 main()(或其他启动代码)中,计算出这些值应该是什么,并将它们传递给 ClientModule构造函数,并将它们保留为字段,并将它们绑定为常量。

    另一方面,每次获取新实例时传递一个唯一参数与注入并不完全相同 - 这更像是一种工厂方法,因此您可以请求一个带参数的实例。为此,请考虑辅助注射或自动工厂。这些工具将帮助您创建一个工厂,一个可以将运行时参数传递给的实例,并获得一个通过注入创建但仍包含这些参数的实例。

    https://github.com/google/guice/wiki/AssistedInject

    https://github.com/google/auto/tree/master/factory

    How to use Guice's AssistedInject?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多