c# - 在使用属性注入时,我们如何知道什么是“本地默认值”?
问题描述
我正在阅读 Mark Seemann 所著的 .NET 中的依赖注入一书,在那里我偶然发现了Property Injection的主题。
正如书中描述的使用属性注入的条件是:
1)当依赖注入的使用是可选的
2)当我们有一个好的本地默认值时
当我在互联网上搜索“本地默认值”时,我没有得到这个概念的任何重要定义。
解决方案
在本书的两个版本中,Local Default
都可以在第 4.2.2 节中找到 的定义和描述。第二版规定:
定义:本地默认值是源自同一模块或层的依赖项的默认实现。
本地默认值
当您开发具有Dependency的类时,您可能会考虑该Dependency的特定实现。如果您正在编写访问存储库的域服务,那么您很可能计划开发使用关系数据库的存储库的实现。
使该实现成为正在开发的类使用的默认值是很诱人的。但是当这样的预期默认值在不同的程序集中实现时,将其用作默认值意味着创建对该其他程序集的硬引用,这实际上违反了第 1 章中描述的松散耦合的许多好处。这种实现与Local相反默认值——它是一个外国默认值。硬引用外部默认值的类正在应用Control Freak反模式。我们将在第 5 章讨论Control Freak。
相反,如果预期的默认实现与消费类在同一个库中定义,则不会出现该问题。存储库不太可能出现这种情况,但是这种本地默认值经常作为策略模式的实现出现。
注意:第一版中本地默认值的文本略有不同,但差别不大。我使用了第二版的文本,因为我没有可以轻松复制/粘贴形式的第一版文本。
提示:由于您处于本书的开头,我的建议是切换到第二版,因为它是最新版本,并且是对本书的整体改进。这篇博文描述了 Mark 和我在该版本中所做的改进。
推荐阅读
- powershell - Powershell FileSystemWatcher 在一段时间后停止通知
- c# - 将嵌套对象导出到 CSV
- python - Converting dates less than 1970 in python using pandas
- reactjs - React Native:当您离开一个组件时,该组件是否会被卸载?
- mkdocs - Mkdocs材料水平菜单不起作用
- python - 这算不算“数据泄露”?
- operating-system - 寻找有关名为 WhatDoesItDo 的编程语言的信息
- go - 通过 Arango DB 中的不同集合进行查询并在路径边缘应用过滤器
- ruby - 在 WSL 上使用 rbenv 安装 ruby 时出现错误“block in install_default_gem”
- java - 在反应器中流动多个对象的有效/正确方法是什么