java - 根据参数重用Guice中的Provide

标签 java dependency-injection java-8 guice

我尝试过搜索此问题,但尚未真正找到解决方案,因此决定发布问题。

我正在开发一个应用程序,用户将输入一个 IP(SNMP 设备),我的应用程序需要连接到它并使用它。在应用程序运行时,用户可能会提供另一个 IP 地址,然后我需要连接到第二个 IP 地址,同时保持两个连接处于 Activity 状态(作为单例)。

我的问题是我无法从概念上理解这个问题。我的连接模块现在如下所示:

@Override
Configure() {
  String ip = first ip;
}

@Provides
Connect connect() {
  // connect to ip
  return connection;
}

有人可以给我一些提示吗?

最佳答案

您可能应该将 IP 地址作为参数传递给 Connect 类构造函数。然后您可以查看FactoryModuleBuilder这样您就可以将依赖项注入(inject)代码中的 Connect 类。至于你对单例的要求,我不太清楚你的意思。根据定义,单例意味着一个类只有一个实例。在这里,您需要两个(或可能更多)。我怀疑您在整个应用程序中最多希望每个 IP 字符串有一个 Connect 实例。如果是这种情况,您的工厂需要比 FactoryModuleBuilder 自动创建的工厂更加聪明。它本身可以是一个单例,并存储已创建的 ip -> connect 实例的索引(映射?并发映射?缓存?这取决于您的线程安全要求)。

希望有帮助。

关于java - 根据参数重用Guice中的Provide,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46324141/

相关文章:

java - 检查新 Realm 对象是否尚未保存

c# - 静态委托(delegate)是线程安全的吗?

c# - 使用 IoC 解析 Action Methods 中的模型对象

c# - System.Web.Http.HttpConfiguration 中的 DependencyResolver 与 System.Web.Mvc 中的 DependencyResolver

java - 如何在方法中流式传输 Java List (Varargs) 的值?

java - 使用 Gradle 将环境变量添加到 Cucumber 任务

java - 如何在eclipse中显示日文字符

spring-boot - Spring Boot中JMS消费者的动态扩展

java - 在 sqlite db 中添加值并在 EditText 中显示总和

security - 变压器配置异常 : Cannot set the feature for Transformer