C# 通过属性进行可选依赖项注入的约定是什么?

C# 通过属性进行可选依赖项注入的约定是什么?,c#,design-patterns,dependencies,code-injection,convention,C#,Design Patterns,Dependencies,Code Injection,Convention,当我有可选的依赖项(例如日志记录)时,约定是什么? 我想让他们按属性注射。当没有人设定它之后呢?每次检查是否为空?或者找一个什么都不做的假记录器? 1.该问题不仅与日志记录有关。 2.我要求在通过属性注入时使用约定。当您通常可以依赖默认实现,但希望注入替代方案时,通常使用属性注入 在您的示例中,您可能会创建一个DefaultLogger,除非有人通过属性传入替代项,否则该类将使用它 我认为应该总是有某个对象的实例,可能是一个“空对象”。检查空值感觉不正确 还有,你考虑过装修吗?日志记录是一个很好

当我有可选的依赖项(例如日志记录)时,约定是什么? 我想让他们按属性注射。当没有人设定它之后呢?每次检查是否为空?或者找一个什么都不做的假记录器? 1.该问题不仅与日志记录有关。
2.我要求在通过属性注入时使用约定。

当您通常可以依赖默认实现,但希望注入替代方案时,通常使用属性注入

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

我认为应该总是有某个对象的实例,可能是一个“空对象”。检查空值感觉不正确


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

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