我們知道整個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;
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26