使用依赖项注入时的项目组织
本文关键字:项目组 注入 依赖 | 更新日期: 2023-09-27 18:28:05
假设我正在构建一个将一些配置存储在数据库中的软件。我的业务规则、页面等都在我将称为Core的项目中。我有另一个项目,名为Configuration,它拥有访问数据库的所有必要方法。因此:
BusinessComponent ConfigurationProvider
+---------------------------+ +---------------------------+
| | | |
| | ----> | |
| | | |
+---------------------------+ +---------------------------+
Configuration对象通过接口IConfiguration
注入到业务组件中。
BusinessComponent IConfigurationProvider ConfigurationProvider
+--------------------------+ +---------------------------+ +---------------------------+
| | | | | |
| | ---> | | ---> | |
| | | | | |
+--------------------------+ +---------------------------+ +---------------------------+
因此,在某种意义上,BusinessComponent
和ConfigurationProvider
都依赖于IConfigurationProvider
。
问题是,在两个项目中,核心还是配置应该是IConfigurationProvider
?
我认为,在使用DI时,最好让项目通过创建接口来声明其依赖关系,然后有兴趣提供这些实现的项目添加对该项目的引用。它看起来绝对像是一种"可扩展性"方法。(这是依赖反转的一种形式,不是吗?)
然而,当您有多个依赖于相同配置的项目时,这种方法会变得奇怪——在这种情况下,我们会有两个类似的IConfigurationProvider
声明。
如果以前有人问过这个问题,我很抱歉,但我一直找不到。
我认为您应该考虑拥有一个不同的项目/程序集,它将容纳您的所有接口,而您的其他项目将引用此项目。这也将起到SDK程序集的作用,您可以将其提供给任何希望提供自己实现的人,而不必分发几个也包含自己实现的大型程序集。