7

我可以看到以前曾提出过类似的问题,但是对于 DI 和 .Net 来说是全新的,我无法掌握整个解决方案,或者可能找不到正确的来源......

  • 我有程序集 WebAPI、BL、DL。
  • WebAPI依赖于BL,
  • BL依赖于DL,
  • WebAPI 不引用 DL,我想保持不变。还有一些程序集,但这足以说明问题。

WebAPI 有应用程序启动部分,因此我可以使用它来初始化 Ninject 内核并为 WebAPI 项目注册依赖项。

我怎样才能为 BL 和其他程序集实现相同的目标?

4

2 回答 2

3

有几种不同的方法,您可以使用Ninject 约定自动将每个解析ISomething为具有相同名称的实现(例如IThing-> ),或者您可以在每个注册依赖项的程序集中Thing创建一个Ninject 模块(您的BL 可以在你的 DL 中加载模块)。

您采用的方法取决于您是否需要为不同的对象定义不同的范围,例如,如果您希望将某些事情解析为可能会影响您使用的方法的单例。

于 2012-10-25T22:13:21.210 回答
0

我认为Mark Seemann 对此的建议很棒——在应用程序的最高可能层创建一个组合根。对于 Web 应用程序,这意味着在 Globals.asax 文件中。我可以解释这样做的充分理由,但链接的博客文章做得更好。

这确实打破了你试图实现的分层,但只是勉强,我认为这是一种合适的方式。如果您的 Web 层足够薄(即,您可以很容易地用厚客户端替换它),那么这并不是什么大损失。如果你真的反对,你可以在 BL 中为 DL 创建一个组合根。

于 2013-01-23T14:22:51.780 回答