根据参数复用Guice中的Provide
Reuse Provide in Guice based on parameters
我试过搜索这个,但还没有真正找到解决方案,所以决定 post 一个问题。
我正在开发一个应用程序,用户将在其中输入一个 IP(一个 SNMP 设备),我的应用程序需要连接到它并使用它。在应用程序运行期间,用户可能会提供另一个 IP 地址,然后我需要连接到第二个 IP 地址,同时保持两个连接都处于活动状态(作为单例)。
我的问题是我无法从概念上解决这个问题。我的连接模块现在如下所示:
@Override
Configure() {
String ip = first ip;
}
@Provides
Connect connect() {
// connect to ip
return connection;
}
有人可以给我一些提示吗?
您可能应该将 IP 地址作为参数传递给 Connect class 构造函数。然后您可以查看 FactoryModuleBuilder 以便您可以在代码中向 Connect class 注入依赖项。至于您对单身人士的要求,我不太确定您的意思。根据定义,单例意味着 class 只有一个实例。在这里,您需要两个(或可能更多)。我怀疑您希望在整个应用程序中每个 IP 字符串最多有一个 Connect 实例。如果是这种情况,您的工厂需要比 FactoryModuleBuilder 自动创建的工厂更聪明一些。它本身可能是一个单例,并存储一个索引(映射?并发映射?缓存?这取决于您的线程安全要求) ip -> connect 那些已经创建的实例。
希望对您有所帮助。
我试过搜索这个,但还没有真正找到解决方案,所以决定 post 一个问题。
我正在开发一个应用程序,用户将在其中输入一个 IP(一个 SNMP 设备),我的应用程序需要连接到它并使用它。在应用程序运行期间,用户可能会提供另一个 IP 地址,然后我需要连接到第二个 IP 地址,同时保持两个连接都处于活动状态(作为单例)。
我的问题是我无法从概念上解决这个问题。我的连接模块现在如下所示:
@Override
Configure() {
String ip = first ip;
}
@Provides
Connect connect() {
// connect to ip
return connection;
}
有人可以给我一些提示吗?
您可能应该将 IP 地址作为参数传递给 Connect class 构造函数。然后您可以查看 FactoryModuleBuilder 以便您可以在代码中向 Connect class 注入依赖项。至于您对单身人士的要求,我不太确定您的意思。根据定义,单例意味着 class 只有一个实例。在这里,您需要两个(或可能更多)。我怀疑您希望在整个应用程序中每个 IP 字符串最多有一个 Connect 实例。如果是这种情况,您的工厂需要比 FactoryModuleBuilder 自动创建的工厂更聪明一些。它本身可能是一个单例,并存储一个索引(映射?并发映射?缓存?这取决于您的线程安全要求) ip -> connect 那些已经创建的实例。
希望对您有所帮助。