【问题标题】:How to replace singleton (a data source provider) by Guice?如何用 Guice 替换单例(数据源提供者)?
【发布时间】:2013-08-05 22:35:03
【问题描述】:

您好,我目前正在开发一个 xtext 图形编辑器,它在某种程度上类似于 Android 中的 ui 编辑器。您可以通过在图形视图中拖放或在文本编辑器中手动编写代码来创建不同的 ui 组件。要么修改将被序列化到文档中。

所以这里有一个问题。因为我需要为整个应用程序提供唯一的文档源,所以我使用了一个单例类。但是我读过一些建议避免使用单例的文章,所以我想通过依赖注入来替换单例类。看起来我必须通过很多类将文档作为参数传递。

有没有办法让 Guice 自动注入数据源提供者? (由于 Xtext 已经与 Guice 集成,我也想使用它而不是其他依赖注入框架。)

谢谢!

【问题讨论】:

  • 您能否提供更改前后的 UML 图
  • @Imran 我添加了一个UML图,希望对你有帮助。
  • 在基类中创建静态成员变量怎么样?您可以通过基类中公开的 Setter(不通过构造函数)方法注入此依赖项。这样,对子类进行单元测试也很容易。

标签: design-patterns dependency-injection guice


【解决方案1】:

Guice 本身支持Singleton 范围,它不会每次都创建一个新实例。

@Singleton
public class DatasourceProvider{
  /* everything here should be threadsafe! */
}

所以在这里,Guice 会注意只有一个实例,每当您要求注入 DatasourceProvider 时,它都会返回相同的实例。

【讨论】:

  • 好吧,我认为getInstance() 方法没有区别。我真正想要的是使特定文件成为注入的依赖项。
  • @dark_chenshifei 我没有得到你想要达到的目标。你能提供同样的SSCCE吗?
  • 对不起我的表达方式,但是我已经添加了一个UML图并修改了描述,希望它可以帮助你理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多