微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将可变参数传递给 Guice @Provides 方法

如何解决将可变参数传递给 Guice @Provides 方法

我有一个 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 方法,而在我的情况下,我想传递一个将在运行时生成的字符串。如何解决这个问题?任何形式的帮助将不胜感激。

谢谢

解决方法

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

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

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

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

How to use Guice's AssistedInject?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。