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

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

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

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

網(wǎng)友評論