代码之家  ›  专栏  ›  技术社区  ›  helpermethod

你能在任何需要单例的地方使用依赖注入吗?

  •  2
  • helpermethod  · 技术社区  · 16 年前

    这听起来可能是一个愚蠢的问题,但是DI能在任何需要单例的地方使用吗?或者在某些用例中,单例更有意义?我的一位教授说,有一些但有效的情况下,一个单身汉是“足够好”,但我不知何故不高兴:-/。

    3 回复  |  直到 16 年前
        1
  •  3
  •   REA_ANDREW    16 年前

    Singleton模式是一个强大的模式,但是像所有的设计模式一样,如果使用不正确的方式,它们可能弊大于利。DI和避免单例也带来了更好的可测试性。

    现在干杯,

    安得烈

        2
  •  3
  •   Community Mohan Dere    9 年前

    单身是一种模式。它经常出现在DI容器中或作为 static 静止的 风味。

    暴露在外的物体 静止的 为消费者提供尽可能低的摩擦;这就是为什么它们如此吸引人。依赖注入以不同的方式解决相同的问题(对象访问)。对于DI,依赖项的生存期是一个配置细节,而不是一个固有的事实。

    下面是我的另一个答案,它解决了这个问题:

    Dependency Injection & Singleton Design pattern

        3
  •  2
  •   nas    16 年前

    只要有可能,我肯定会对单例对象使用依赖注入。即使除了对象的一个特定实现之外,您不太可能注入任何东西,使用注入也没有什么坏处,而且有很多潜在的好处。根据我的经验,依赖注入使阅读代码的人更容易理解依赖关系,使代码更容易重构,提高了可测试性,并且常常提高了构建时间。

    也就是说,我遇到过一些代码,在这些代码中,我本希望使用注入,但选择不使用。这里有一些例子。

    • 我正在处理一个我不能轻易改变的API。
    • 我在编写代码,如果我要求客户机注入一些他们不应该知道的东西,那么API看起来会非常奇怪。对于一些静态实用程序库来说也是如此,比如解析字符串的函数,其中有一个我不想让用户知道的helper对象。不过,我通常会尽量避免这种情况。

    如果您还没有使用它们,那么您可能需要检查依赖注入框架。我很乐意使用 Google Guice