为什么我应该在ASP.Net应用程序中使用IoC Container(Autofac,Ninject,Unity等)进行依赖注入?

tmt*_*tmt 9 c# asp.net dependency-injection

这是一种理论问题.

我已经在Business层上使用带有Service(Facade)模式的Unity DY.我很容易使用它,但......

每个小事务中都有明显的性能和内存开销.我没有创建DataContext(像"sql-connection"那样读取),而是通过统一创建多个服务对象.

示例:简单操作"GetAllArticles"导致创建

无用:

  • UserService(用于权限检查)
  • ArticleService(用于文章Crud操作)

有用的:

  • DataContext(用于articleService)
  • ArticleViewModels.

但是,如果HightLoadApplication和世界上数十亿人试图从我的超级网站上获取文章呢?垃圾收集器和服务器的CPU温度怎么样?

所以:

  • 我理解团结(或任何其他)正确的工作吗?
  • 有没有替代解决方案?
  • 在高负载应用的情况下我该怎么办

我很乐意听到您的意见和经验,即使它不是灵丹妙药或"最佳实践".

Win*_*Win 14

当我们编写代码时,我们的目标是SOLID设计原则,它使代码适应性变化.

  • S:单一责任原则
  • O:开放/封闭原则
  • L:Liskov替代原则
  • I:界面隔离
  • D:依赖注射

为了实现前四个 - SOLI,我们想要注入依赖项.

有没有替代解决方案?

您可以手动(贫困人的依赖注入)或使用控制反转(IoC)容器(如Autofac,Ninject,Structure Map,Unity等)实现依赖注入(DI ).

在高负载应用的情况下我该怎么办

使用IoC容器进行DI从来都不是速度问题.

Mark Seemann说,"创建一个对象实例是.Net Framework非常快的事情.你的应用程序可能出现的任何性能瓶颈都会出现在其他地方,所以不要担心它."

底线是我个人使用IoC容器在每一个ASP.Net MVC和Web API项目.此外,我几乎看不到任何不使用IoC容器的开源MVC和Web API应用程序.