【问题标题】:What is the convention for optional dependency injection via properties?通过属性进行可选依赖注入的约定是什么?
【发布时间】:2013-12-18 00:12:14
【问题描述】:

当我有可选的依赖项时的约定是什么,例如日志记录? 我想让它们通过属性注入。当没有人设置它之后呢?每次都检查 null 吗?或者得到一个什么都不做的假记录器? 1.该问题不仅仅与日志记录有关。 2. 通过属性注入时我要求约定。

【问题讨论】:

  • 你的设计有缺陷。依赖项永远不应该是“可选的”。您能否为您的场景提供更可靠的用例?
  • 这很有趣。那么当我不想在运行单元测试时记录时,它应该看起来像 logger 吗?我使用 log4net
  • 如果我编写包含日志记录的库会怎样。正如我所读到的,约定是通过构造函数注入它,但我不希望用户拥有它,这就是我通过属性注入它的原因。日志记录是附加功能,而不是主要功能。为什么不能是可选的?
  • 有一个标志是否记录怎么样?
  • Imran,每次我想使用它时检查那个标志这个对象与检查 null 是一样的

标签: c# design-patterns dependencies code-injection convention


【解决方案1】:

当您通常可以依赖默认实现但想要注入替代方案的选项时,通常使用属性注入。

在您的示例中,您可能会创建该类使用的 DefaultLogger,除非有人通过属性传入替代项。

我认为应该总是有一个东西的实例,也许是一个“空对象”。检查 null 感觉不对。

另外,你考虑过装饰吗?日志记录是一个很好的例子,说明装饰如何添加额外的可选功能。

【讨论】:

    猜你喜欢
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2018-08-13
    • 2021-02-26
    • 2010-12-02
    相关资源
    最近更新 更多