如何在组件中使用Ninject

我可以看到类似的问题之前已经被问到过,但是对于DI和.Net来说我完全陌生,我无法掌握整个解决方案,或者可能找不到合适的源代码....

  • 我有程序集WebAPI,BL,DL。
  • WebAPI依赖于BL,
  • BL依赖于DL,
  • WebAPI不引用DL,我希望保持不变。 有更多的程序集,但这足以说明问题。
  • WebAPI具有应用程序开始部分,因此我可以使用它来初始化Ninject内核并为WebAPI项目注册依赖项。

    我怎样才能达到BL和其他议会的相同?


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

    你采取的方法取决于你是否需要为不同的对象定义不同的作用域,例如,如果你想将某些事情解决为可能影响你使用哪种方法的单例。


    我认为Mark Seemann对此的建议非常好 - 在应用程序的最高层创建一个组合根。 对于Web应用程序,这意味着在Globals.asax文件中。 我可以详细说明这一点的好理由,但是链接的博客文章做得更好。

    这确实会打破您尝试实现的分层,但只是勉强,而我认为这是一种恰当的方式。 如果你的网页图层非常薄(例如,你可以很容易地用厚客户端替换它),那么这不是一个大的损失。 如果您真的对此不利,您可以在DL中为BL创建组合根。

    链接地址: http://www.djcxy.com/p/11353.html

    上一篇: How to use Ninject across assemblies

    下一篇: Is it possible to create System.Int32 in C#?