我可以看到之前已经提出过类似的问题,但对DI和.Net来说是全新的我无法掌握整个解决方案或者找不到合适的来源......
WebAPI有应用程序启动部分,因此我可以使用它来初始化Ninject内核并注册WebAPI项目的依赖项。
我如何为BL和其他组件实现相同的目标?
答案 0 :(得分:3)
有几种不同的方法,您可以使用Ninject Conventions自动将每个ISomething
解析为具有相同名称的实现(例如IThing
- > {{1或者你可以在每个程序集中创建一个Ninject Module来注册依赖项(BL中的模块可以在你的DL中加载模块)。
您采用的方法取决于您是否需要为不同的对象定义不同的范围,例如,如果您希望将某些内容解析为可能影响您使用哪种方法的单例。
答案 1 :(得分:0)
我认为Mark Seemann's advice about this很棒 - 在应用程序的最高层创建一个组合根。对于Web应用程序,这意味着在Globals.asax文件中。我可以说明这个的好理由,但链接的博客文章做得更好。
这确实打破了你想要实现的分层,但只是勉强,我认为这是一种合适的方式。如果您的网络层相当薄(即,您可以相当容易地用厚客户端替换它),那么这不是一个很大的损失。如果你真的对此不利,你可以在BL中为DL创建一个组合根。