假设我正在构建一个将一些配置存储在数据库中的软件。我的业务规则、页面等都在我称之为Core的项目中。我有另一个项目,称为Configuration,它具有访问数据库的所有必要方法。所以:
BusinessComponent ConfigurationProvider
+---------------------------+ +---------------------------+
| | | |
| | ----> | |
| | | |
+---------------------------+ +---------------------------+
配置对象通过接口注入IConfiguration
到业务组件中。
BusinessComponent IConfigurationProvider ConfigurationProvider
+--------------------------+ +---------------------------+ +---------------------------+
| | | | | |
| | ---> | | ---> | |
| | | | | |
+--------------------------+ +---------------------------+ +---------------------------+
所以,从某种意义上说,两者BusinessComponent
都ConfigurationProvider
取决于IConfigurationProvider
。
问题是,core或Configuration应该在这两个项目中的哪一个IConfigurationProvider
?
我认为,在使用 DI 时,最好让项目通过创建接口来声明它的依赖关系,然后有兴趣提供这些实现的项目添加对这个项目的引用。它看起来绝对像一种“可扩展性”方法。(这是依赖倒置的一种形式,不是吗?)
但是,当您有多个依赖于相同配置的项目时,这种方法会变得很奇怪——IConfigurationProvider
在这种情况下,我们将有两个类似的声明。
很抱歉,如果以前有人问过这个问题,但我一直找不到。