(此文章同時發表在本人微信公眾號“dotNET每日精華文章”,歡迎右邊二維碼來關注。)
題記:ASP.NET 5整個底層都架構於依賴注入機制之下,今天介紹的文章詳細介紹了內置依賴注入容器。
在ASP.NET之前的版本中,雖然各個框架(MVC、WEB API、SignalR)都支持依賴注入,但是由於框架是相互獨立的,所以使用依賴注入的方式都有所差異。Katana曾經期望通過OWIN來統一這些差異,直到ASP.NET 5中才得以實現。這得利於整個ASP.NET 5都是構建於依賴注入機制之下,且內置了一個依賴注入容器。在這篇文章《Dependency Injection In ASP.NET 5 – One Step Deeper》中,Emad Alashi就深入介紹了ASP.NET 5引入的依賴注入機制和默認容器的相關接口包括運行原理。
ASP.NET 5之所以能統一依賴注入的方式,是因為對依賴注入進行了一個更為高級的抽象,並提供了一系列接口來封裝這種抽象。
- IServiceProvider:這是整個依賴注入機制的主接口,讓開發人員可以獲取到之前注冊到容器中的對象實例。其只提供一個方法:GetService(Type)。這個方法可以對應到Autofac中的container.Resolve<Service>()或者Ninject中的kernel.Get<Service>()。
- IServiceScope:這是把IServiceProvider包裝為Scoped(限定范圍內)容器的接口。比如通過HttpContext.RequestServices屬性獲取到的IServiceProvider實例即是一個Scoped的。
- IServiceScopeFactory:要創建IServiceScope的實例就需要依靠這個工廠接口。
- ServiceLifetime:提供了對象作用域的枚舉(Singleton、Scoped和Transient)。
- ServiceDescriptor:服務描述來構建一個容器的所有信息。
文章后面還詳細介紹了依賴注入機制的具體使用方式和運行原理,涉及到:注冊服務、處理請求(獲得對象實例)。最后還以Autofac為例介紹了如何使用第三方的IoC框架。
更細節的文字大家可以“閱讀原文”。
原文鏈接:http://www.emadashi.com/2015/06/dependency-injection-in-asp-net-5-one-step-deeper/