我想实现动态依赖注入。GUICE支持这一点吗?如果没有,你能推荐其他的依赖注入框架吗?
应该通过@Inject进行注入的实现必须在运行时确定,例如通过与用户的交互。
与这些问题类似:http://www.panz.in/2008/12/dynamic-dependency-injection.html http://www.panz.in/2008/12/dynamic-dependency-injection.html
谢谢
发布于 2013-07-17 01:42:54
实现需要根据输入的不同而有所不同,在某些情况下,您必须将输入解析为某种类型的类。
如果你想让这个映射存在于Guice中,那么你基本上就得到了一个基于参数的实现,它映射到the SO question I just answered here。您可以编写一个小的可注入类,该类接受输入并返回一个完全注入的实现。
如果您已经有了这个映射,并且(例如)在一个变量中有一个类文字,那么您可以只使用inject an Injector directly并向它请求实现。
class YourClass {
@Inject Injector injector;
SomeInterface yourMethod(String input) {
Class<? extends SomeInterface> clazz = getClassLiteralFromInput(input);
return injector.getInstance(clazz);
}
Class<? extends SomeInterface> getClassLiteralFromInput(String input) {
// Implement this as needed.
return SomeInstance.class;
}
}请注意,虽然您总是可以注入一个Injector,但您应该只在您确实不知道需要哪种实现时才这样做(就像这里)。通常,您应该注入SomeInstance本身,或者如果您想延迟创建,则应该注入一个Provider<SomeInstance>。
发布于 2013-07-16 23:48:27
我们曾经有过类似的需求,所以我们所做的是使用工厂模式,并使用spring在工厂类实现中添加所有实现。
这样,当运行时我们知道要使用哪个实现时,我们会调用我的工厂来提供实现类。
此外,任何时候你有更多的实现,你都可以更新工厂类的spring配置。
这可能不是你想要的设计,但这解决了我们的目的。
干杯!!
https://stackoverflow.com/questions/17680171
复制相似问题