2016-02-04 102 views
7

这是一种理论问题。为什么我应该在ASP.Net应用程序中使用IoC容器(Autofac,Ninject,Unity等)进行依赖注入?

我已经在业务层上使用Unity DY与Service(Facade)模式。 我很简单使用它,但...

在每个小事务中都有明显的性能和内存开销。而不是创建DataContext(阅读它像“sql-connection”)我创建了几个服务对象的统一。

实施例: 简单的操作 “GetAllArticles” 原因创建的

无用:

  • UserService(对于权限检查)
  • ArticleService(对于第界面污物操作)

而有用:

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

但是,如果是HightLoadApplication和全球数十亿人试图从我的超级站点获取文章呢?垃圾回收器和服务器的CPU温度如何?

所以:

  • 我是理解与统一(或任何其他)正确的工作?
  • 有没有其他解决方案?
  • 我应该做在高负荷应用程序的情况下

我会很高兴听到您的意见和经验,即使它不是灵丹妙药或“最佳实践”。

+0

[你可以查看](http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison)各种喷油器的性能,并自己决定是否认为性能的提升将超过单元测试的所有好处(提示:很可能不会) – DLeh

回答

10

当我们编写代码时,我们的目标是让代码适应变化的SOLID Design Principals

  • S:单责任原则
  • ○:打开/关闭原理
  • L:将里氏替换原则
  • I:接口偏析
  • d:依赖注射

为了实现前四 - SOLI,我们要注入依赖关系。

有没有其他解决方案?

可以实现依赖注入(DI)手动(穷人的依赖注入)或使用控制反转(IoC)容器反转(如Autofac,Ninject,构造图,团结等等)

我应该在高负荷的应用

使用IoC容器对DI的情况下做的从来都不是速度的问题。 “

Mark Seemann说,”创建一个对象实例是.Net框架速度非常快,任何性能瓶颈可能会出现在其他地方,所以不要担心。

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

4

为了解DI是如何工作的,看看这篇大文章: http://www.martinfowler.com/articles/injection.html

我还建议由马克·西曼阅读,即使这本书的一半: 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(它是那里最快的之一),每天都有数百万次点击,并且性能影响几乎无法衡量。

相关问题