首页 > 解决方案 > 在使用属性注入时,我们如何知道什么是“本地默认值”?

问题描述

我正在阅读 Mark Seemann 所著的 .NET 中的依赖注入一书,在那里我偶然发现了Property Injection的主题。

正如书中描述的使用属性注入的条件是:

1)当依赖注入的使用是可选的
2)当我们有一个好的本地默认值时

当我在互联网上搜索“本地默认值”时,我没有得到这个概念的任何重要定义。

标签: c#.netdependency-injection

解决方案


在本书的两个版本中,Local Default都可以在第 4.2.2 节中找到 的定义和描述。第二规定:

定义:本地默认值是源自同一模块或层的依赖项的默认实现。

本地默认值

当您开发具有Dependency的类时,您可能会考虑该Dependency的特定实现。如果您正在编写访问存储库的域服务,那么您很可能计划开发使用关系数据库的存储库的实现。

使该实现成为正在开发的类使用的默认值是很诱人的。但是当这样的预期默认值在不同的程序集中实现时,将其用作默认值意味着创建对该其他程序集的硬引用,这实际上违反了第 1 章中描述的松散耦合的许多好处。这种实现与Local相反默认值——它是一个外国默认值。硬引用外部默认值的类正在应用Control Freak反模式。我们将在第 5 章讨论Control Freak

相反,如果预期的默认实现与消费类在同一个库中定义,则不会出现该问题。存储库不太可能出现这种情况,但是这种本地默认值经常作为策略模式的实现出现。

注意:第一版中本地默认值的文本略有不同,但差别不大。我使用了第二版的文本,因为我没有可以轻松复制/粘贴形式的第一版文本。

提示:由于您处于本书的开头,我的建议是切换到第二版,因为它是最新版本,并且是对本书的整体改进。这篇博文描述了 Mark 和我在该版本中所做的改进。


推荐阅读