【问题标题】:Why should I use IoC Container (Autofac, Ninject, Unity etc) for Dependency Injection in ASP.Net Applications?为什么要在 ASP.Net 应用程序中使用 IoC 容器(Autofac、Ninject、Unity 等)进行依赖注入?
【发布时间】:2016-02-04 21:07:09
【问题描述】:

这是一个理论问题。

我已经在业务层使用 Unity DY 和 Service(Facade) 模式。 我用起来很简单,但是...

在每个小事务中显然存在性能和内存开销。我不是创建 DataContext(像“sql-connection”一样读取它),而是通过统一创建多个服务对象。

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

没用的:

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

而且很有用:

  • DataContext(用于文章服务)
  • ArticleViewModels。

但是,如果一个 HightLoadApplication 以及全球数十亿人试图从我的超级站点获取文章怎么办?垃圾收集器和服务器的cpu温度呢?

所以:

  • 我理解的统一(或任何其他)工作是否正确?
  • 有其他解决方案吗?
  • 高负载应用怎么办

我很乐意听取您的意见和经验,即使这不是灵丹妙药或“最佳实践”。

【问题讨论】:

  • you can look up 各种注入器的性能,并自行决定您是否认为性能损失会超过能够进行单元测试的所有好处(提示:很可能不会)

标签: c# asp.net dependency-injection


【解决方案1】:

当我们编写代码时,我们的目标是SOLID Design Principals,它使代码能够适应变化。

  • S:单一责任原则
  • O:开/关原则
  • L : Liskov 替换原则
  • I:接口隔离
  • D:依赖注入

为了实现前四个——SOLI,我们要注入依赖。

有其他解决方案吗?

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

高负载应用怎么办

将 IoC 容器用于 DI 从来都不是速度问题。

Mark Seemann 说,“创建对象实例是 .Net Framework 非常快的事情。您的应用程序可能遇到的任何性能瓶颈都会出现在其他地方,所以不用担心。” em>

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

【讨论】:

    【解决方案2】:

    要了解 DI 的工作原理,请查看这篇精彩的文章: http://www.martinfowler.com/articles/injection.html

    我还建议阅读 Mark Seemann 的这本书的一半: http://www.amazon.ca/Dependency-Injection-NET-Mark-Seemann/dp/1935182501/ref=sr_1_1?ie=UTF8&qid=1454620933&sr=8-1&keywords=mark+seemann

    除非您尝试设置性能记录,否则我认为 DI 不会对性能产生明显影响。过去一年我们一直在使用 SimpleInjector(它是目前最快的之一)在一个每天获得数百万次点击的网站上,性能效果几乎无法衡量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 2016-08-06
      • 2010-12-07
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多