Guice Names.bindProperties(binder(),properties)在模块的输出上?

时间:2015-05-17 16:07:04

标签: properties guice

我使用外部服务来提供属性,但希望将这些属性用作@Named(..)变量。尝试在configure方法中执行此操作会失败,并使用npe:

Names.bindProperties(binder(), myPropRetriever.getProperties());

失败,因为myPropRetriever没有出现,直到guice完成它的工作。我可以看出为什么这是有道理的 - 任何人都知道任何可能解决的时髦黑客?在这种情况下会很方便..

1 个答案:

答案 0 :(得分:1)

感谢durron597指向相关问题的指针,这让我足以弄明白。答案是使用子喷射器对先前的喷射器输出采取措施。示例如下:

_.remove($scope.choices, function(n) {
  return n.id == 'choice2';
});

注射器现在是应用程序其余部分的注射器。

然后在MyModule中,您可以对创建的对象采取措施:

Injector propInjector = Guice.createInjector(new PropertiesModule());
PropertiesService propService = propInjector.getInstance(PropertiesService.class);
Injector injector = propInjector.createChildInjector(new MyModule(Objects.firstNonNull(propService.getProperties(), new Properties())));

}

万一它可以帮助其他人..!