使用属性注入时我们如何知道什么是“本地默认值”?

kas*_*szm 5 .net c# dependency-injection

我正在阅读 Mark Seemann 所著的《.NET 中的依赖注入》一书,其中我偶然发现了属性注入这一主题。

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

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

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

Ste*_*ven 4

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

\n
\n

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

\n

本地默认值

\n

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

\n

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

\n

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

\n
\n

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

\n

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

\n

  • 第二版确实是一个重大改进(对于已经是一本非常好的书)。 (2认同)
  • 史蒂文,我肯定会切换到新版本,感谢您消除我的疑虑,非常感谢您的帮助。 (2认同)