让我们说我正在构建一个将某些配置存储在数据库中的软件。我的业务规则,页面等都在项目中,我称之为 Core 。我有另一个名为 Configuration 的项目,它具有访问数据库所需的所有方法。所以:
BusinessComponent ConfigurationProvider
+---------------------------+ +---------------------------+
| | | |
| | ----> | |
| | | |
+---------------------------+ +---------------------------+
Configuration对象通过接口IConfiguration
注入到业务组件中。
BusinessComponent IConfigurationProvider ConfigurationProvider
+--------------------------+ +---------------------------+ +---------------------------+
| | | | | |
| | ---> | | ---> | |
| | | | | |
+--------------------------+ +---------------------------+ +---------------------------+
因此,从某种意义上说,BusinessComponent
和ConfigurationProvider
都取决于IConfigurationProvider
。
问题是, core 或 Configuration 这两个项目中应该IConfigurationProvider
是哪个?
我认为,在使用DI时,最好让项目通过创建接口来声明它的依赖关系,然后是那些有兴趣提供这些实现的项目,添加对该项目的引用。它看起来绝对像一个可扩展性'做法。 (它是一种依赖倒置的形式,不是吗?)
然而,当你有多个项目取决于相同的配置时,这种方法会变得很奇怪 - 在这种情况下我们会有两个类似的IConfigurationProvider
声明。
我很抱歉,如果以前曾经问过这个问题,但我还没有找到它。
答案 0 :(得分:0)
我认为您应该考虑使用不同的项目/程序集来保存所有接口,而其他项目将引用此项目。这也将作为一个SDK程序集,您可以提供给任何想要提供自己的实现的人,而不必分发几个也包含您自己的实现的大型程序集。