我們知道整個ASP.NET Core建立在以ServiceCollection/ServiceProvider為核心的DI框架上,它甚至提供了擴展點使我們可以與第三方DI框架進行整合。對此比較了解的讀者朋友應(yīng)該很清楚,針對第三方DI框架的整合可以通過在定義Startup類型的ConfigureServices方法返回一個ServiceProvider來實現(xiàn)。但是真的有這么簡單嗎?

一、ConfigureServices方法返回的ServiceProvider貌似沒有用!?

我們可以通過一個簡單的實例來說明這個問題。我們先定義了如下這個一個MyServiceProvider,它實際上是對另一個ServiceProvider的封裝。簡單起見,我們利用一個字典來保存服務(wù)接口與實現(xiàn)類型的映射關(guān)系,這個關(guān)系可以通過調(diào)用Registe方法來注冊。在提供服務(wù)實例的GetService方法中,如果提供的服務(wù)類型已經(jīng)被注冊,我們會創(chuàng)建并返回對應(yīng)的實例對象,否則我們將利用封裝的這個ServiceProvider來提供服務(wù)。為了確保服務(wù)實例能夠被正?;厥?,如果服務(wù)類型實現(xiàn)了IDisposable接口,我們會將它添加到通過字段_disposables表示的集合中。當MyServiceProvider的Dispose方法被調(diào)用的時候,提供的這些服務(wù)實例的Dispose方法會被調(diào)用。

   1: public class MyServiceProvider : IServiceProvider, IDisposable
   2: {
   3:     private IServiceProvider        _innerServiceProvider;
   4:     private Dictionary<Type, Type>  _services;
        		

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負責任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式