首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态依赖注入

动态依赖注入
EN

Stack Overflow用户
提问于 2013-07-16 23:01:37
回答 2查看 2.9K关注 0票数 3

我想实现动态依赖注入。GUICE支持这一点吗?如果没有,你能推荐其他的依赖注入框架吗?

应该通过@Inject进行注入的实现必须在运行时确定,例如通过与用户的交互。

与这些问题类似:http://www.panz.in/2008/12/dynamic-dependency-injection.html http://www.panz.in/2008/12/dynamic-dependency-injection.html

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-17 01:42:54

实现需要根据输入的不同而有所不同,在某些情况下,您必须将输入解析为某种类型的类。

如果你想让这个映射存在于Guice中,那么你基本上就得到了一个基于参数的实现,它映射到the SO question I just answered here。您可以编写一个小的可注入类,该类接受输入并返回一个完全注入的实现。

如果您已经有了这个映射,并且(例如)在一个变量中有一个类文字,那么您可以只使用inject an Injector directly并向它请求实现。

代码语言:javascript
复制
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>

票数 1
EN

Stack Overflow用户

发布于 2013-07-16 23:48:27

我们曾经有过类似的需求,所以我们所做的是使用工厂模式,并使用spring在工厂类实现中添加所有实现。

这样,当运行时我们知道要使用哪个实现时,我们会调用我的工厂来提供实现类。

此外,任何时候你有更多的实现,你都可以更新工厂类的spring配置。

这可能不是你想要的设计,但这解决了我们的目的。

干杯!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17680171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档