我应该在哪里用Ninject 2+进行注入(以及如何安排我的模块?)

 2023-02-17    443  

问题描述

我有一个解决方案,其中有两个相关(与此问题)项目,还有其他一些项目;

  1. 类库,其中有其他几个项目使用的功能.
  2. ASP.NET MVC应用程序.

我的问题基本上是我应该在哪里使用ninject 2进行IOC,考虑…

我应该在哪里用Ninject 2+进行注入(以及如何安排我的模块?)

  • 班级库需要一些DI爱,除了存储库类中需要Web请求特定会话对象的其他内容(想想工作单位).
  • MVC应用需要di,因为使用ninject 2,您基本上从ninjecthttpapplication继承.
  • 课堂库的单元测试需要意识到这一点,以注入不同的存储库.
  • 由于相同的原因,需要注入Web应用程序的单元测试.

我在这里将自己涂成一个心理角,因为我只看到了三个选择.类库中的di,Web应用中的DI或两者兼而有之,但是每个问题都有问题:

  • 我不能在类库中仅做di ,因为MVC应用需要从Ninighthttpapplication继承.
  • 我不能仅在MVC应用中进行DI-毕竟类库是其他库使用的,而MVC应用程序无论如何都不应该对图书馆的内部了解太多.
  • 我想这是我可以看到的唯一出路:两个项目的独立IOC.类库和MVC应用程序各自都有自己的IOC设置,并为他们的工作做DI而不真正关心彼此.

有人有一些”最佳实践”或有关如何做这样的事情的准则?我无法想象我是第一个在这种情况下结束的人,很高兴知道这样做的”正确”方法是…

谢谢!

推荐答案

我不知道ninject,但是除非它与温莎(Windsor),结构图等不同,否则答案往往保持不变,因为有一些常见的DI模式.考虑到这一点:

要意识到的第一件事是,DI与NInject或Windsor之类的特定框架没有绑定.这是一组技术和设计模式.您可以使用所谓的穷人DI手动进行DI,但显然DI容器会变得更好.

为什么这有意义?这很重要,因为一旦您意识到这一点,推论是您应用程序的绝大多数代码应该具有 no 对DI容器的知识.

那么您在哪里使用DI容器?它仅应在组成词根中使用,在您的情况下,它与global.asax相对应.您可以在中阅读更多有关此的信息.所以答案 – 尽管这个问题是关于温莎的,但原则仍然相同.

那单位测试怎么样?他们也应该完全不知道DI容器.请参阅其他详细信息.

通过大量使用构造函数注入,可以在您的库中实现

di.您无需参考任何DI容器即可完成此操作,但是如果您使用DI容器来解决构图根的所有依赖项,则可以使生活变得更加轻松.

以上所述是小编给大家介绍的我应该在哪里用Ninject 2+进行注入(以及如何安排我的模块?),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34240.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。