ASP.NET Web API和依賴注入
ASP.NET Web API中自帶了一個依賴解析器(Dependency Resolver)接口,允許我們向控制器注入依賴關系。不過,Mark Seemann建議要達到此目的最好還是使用IHttpControllerActivator接口,并舉了兩個例子。
使用IDependencyResolver會帶來哪些問題呢?Mark做出了解釋:
問題是,在某個(IDependencyResolver的)實現中,你所得到的是一個Type實例,并要求返回一個對象,但你卻并不了解上下文信息。你不知道依賴關系圖有多深,并且當被多次要求提供相同服務的實例時,你并不知道這是來自同一個HTTP請求,還是多個并發的HTTP請求。
Mark建議最好替換服務容器(Service Container)中的IHttpControllerActivator接口。IHttpControllerActivator提供了HttpRequestMessage對象,可以提供上下文信息。他還列舉了兩個示例,一個是“使用簡單的自定義DI容器”,一個是“使用更加健壯的DI容器,Castle Windsor”、(Autofac ASP.NET Web API (Beta) Integration)。
注意,不管是哪種方法,每個請求都會創建一次控制器,并且在請求被處理后釋放這些控制器。區別主要在于解析類型的時候,容器可以使用哪些信息。 在更廣的范圍來說,這只是ASP.NET可擴展性的一個示例。
歡迎大家掃描下面二維碼成為我的客戶,扶你上云

浙公網安備 33010602011771號