2016-02-04 47 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(它是那裏最快的之一),每天都有數百萬次點擊,並且性能影響幾乎無法衡量。

相關問題