我有一个由几个模块消耗的服务,并且在每个模块中,它定义了自己的提供者,用于提供依赖于另一个值的值。我不想拥有该对象中的所有其他值,而是直接使用该单个值,但是没有办法将Guice的bindConstant()用于提供者。
当前的Psuedo代码:
ConfigurationProvider implements Provider<Configuration> {
final Configuration configuration;
@Inject
public ConfigurationProvider(BuildConfiguration buildConfiguration) {
configuration = new Configuration();
configuration.setDownloadPath(buildConfiguration.getBuildPath() + File.separator + "downloads");
}
public Configuration get() {
return configuration;
}
}
模块内部:
bind(Configuration.class).toProvider(ConfigurationProvider.class);
相反,我想在可能的情况下使用我的属性注入,并且只做这样的事情:
DownloadPathProvider implements Provider<Property<DownloadPath, String>> {
final String downloadPath;
@Inject public DownloadPathProvider(BuildConfiguration buildConfiguration) {
downloadPath = buildConfiguration.getBuildPath() + File.separator + "downloads";
}
public String get() {
return downloadPath;
}
}
我认为问题在于bindConstant可以工作,我需要在初始化模块时确定该值。但是这种情况下的值是后来派生的(实际上是通过另一个提供者)。
虽然它可以将配置放在一个简单的pojo中,但我觉得直接使用属性会更简洁,而不是将它嵌入pojo中。
配置或值实际上是一个常量,因为一旦设置,它就永远不会改变。我只是希望将该值基于另一个值。
答案 0 :(得分:0)
如果在模块创建时未修复此值,则该值不是常量。它实际上是一个单身人士。而不是使用bindConstant()
,只需bind().in(Scope.Singleton)
。
答案 1 :(得分:0)
因为我想能够直接注入原始类型,所以我必须要有创意......
在运行时,属性源按顺序运行,计算属性最后运行。
有点hackish,我会看看我是否可以将其清理一下,然后发布代码以使其工作。