使用依赖项注入时的项目组织

本文关键字:项目组 注入 依赖 | 更新日期: 2023-09-27 18:28:05

假设我正在构建一个将一些配置存储在数据库中的软件。我的业务规则、页面等都在我将称为Core的项目中。我有另一个项目,名为Configuration,它拥有访问数据库的所有必要方法。因此:

             BusinessComponent                     ConfigurationProvider
       +---------------------------+           +---------------------------+
       |                           |           |                           |
       |                           |  ---->    |                           |
       |                           |           |                           |
       +---------------------------+           +---------------------------+

Configuration对象通过接口IConfiguration注入到业务组件中。

        BusinessComponent              IConfigurationProvider              ConfigurationProvider
  +--------------------------+      +---------------------------+      +---------------------------+
  |                          |      |                           |      |                           |
  |                          | ---> |                           | ---> |                           |
  |                          |      |                           |      |                           |
  +--------------------------+      +---------------------------+      +---------------------------+

因此,在某种意义上,BusinessComponentConfigurationProvider都依赖于IConfigurationProvider

问题是,在两个项目中,核心还是配置应该是IConfigurationProvider


我认为,在使用DI时,最好让项目通过创建接口来声明其依赖关系,然后有兴趣提供这些实现的项目添加对该项目的引用。它看起来绝对像是一种"可扩展性"方法。(这是依赖反转的一种形式,不是吗?)

然而,当您有多个依赖于相同配置的项目时,这种方法会变得奇怪——在这种情况下,我们会有两个类似的IConfigurationProvider声明。

如果以前有人问过这个问题,我很抱歉,但我一直找不到。

使用依赖项注入时的项目组织

我认为您应该考虑拥有一个不同的项目/程序集,它将容纳您的所有接口,而您的其他项目将引用此项目。这也将起到SDK程序集的作用,您可以将其提供给任何希望提供自己实现的人,而不必分发几个也包含自己实现的大型程序集。