1

我正在使用 StructureMap 在我的 ASP.NET MVC 项目中进行 DI。我已将我的库分为以下 3 个 dll。

  1. 服务
  2. 数据(包含存储库)

核心仅包含所有接口和服务,数据包含它们的实现。

现在,当我在网站中设置 StructureMap 时,我需要告诉它扫描服务和数据程序集,因为它们包含核心接口的实现,但这意味着我必须在 Web 项目中引用它们,尽管它取决于服务项目只有这取决于数据项目。

对我来说,在 web 项目中引用这两个 dll 没有意义,因为它破坏了抽象的好处?

如果我需要引用这些程序集,有人可以向我解释一下,那么首先使用单独的接口有什么好处?

4

1 回答 1

2

Web 项目是应用程序的组合根。组合根是应用程序中组成应用程序对象图的一个位置。您不必从组合根目录中引用程序集,您可以使用约定扫描程序集,但 IMO 通常不值得付出努力。

通过让组合根引用依赖关系,您可以展平依赖层次结构,从而允许更松散的耦合;在此处查看 Mark Seeman 的出色解释。

将您的应用程序划分为不同的项目(程序集)允许您在不同的应用程序之间重用程序集中的功能,并且还可以按需加载应用程序的某些部分(使用插件架构)。不要过度。想想你为什么要拆分解决方案。即使您将解决方案拆分为多个项目以防止“错误方向”的引用,其他程序员也可能违反您的预期架构。

您在问使用单独的接口有什么意义。接口提供了一种在代码中进行抽象以允许松散耦合和可组合性的方法。通过针对接口而不是具体实现进行编程,您可以轻松更改实现而不更改依赖代码。这使您可以更轻松地更改和调整您的应用程序。

于 2013-07-23T07:59:41.427 回答