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

时间:2013-08-17 15:27:14

标签: c# dependency-injection

让我们说我正在构建一个将某些配置存储在数据库中的软件。我的业务规则,页面等都在项目中,我称之为 Core 。我有另一个名为 Configuration 的项目,它具有访问数据库所需的所有方法。所以:

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

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

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

因此,从某种意义上说,BusinessComponentConfigurationProvider都取决于IConfigurationProvider

问题是 core Configuration 这两个项目中应该IConfigurationProvider是哪个?


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

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

我很抱歉,如果以前曾经问过这个问题,但我还没有找到它。

1 个答案:

答案 0 :(得分:0)

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