如何跨程序集使用Ninject

时间:2012-10-25 22:03:30

标签: c# ninject

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

  • 我有程序集WebAPI,BL,DL。
  • WebAPI依赖于BL,
  • BL依赖于DL,
  • WebAPI不参考DL,我想保持相同。还有更多的装配,但这足以说明问题。

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

我如何为BL和其他组件实现相同的目标?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

我认为Mark Seemann's advice about this很棒 - 在应用程序的最高层创建一个组合根。对于Web应用程序,这意味着在Globals.asax文件中。我可以说明这个的好理由,但链接的博客文章做得更好。

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