aspnetcore 原生 DI 實現(xiàn)基于 key 的服務(wù)獲取

你可能想通過一個字符串或者其他的類型來獲取一個具體的服務(wù)實現(xiàn),那么在 aspnetcore 原生的 MSDI 中,如何實現(xiàn)呢?本文將介紹如何通過自定義工廠來實現(xiàn)。
我們現(xiàn)在恰好有基于 Json 和 MessagePack 的兩種序列化器
有一個接口是這樣的
Bilibili 代碼塊無法正常渲染,因此無法正常顯示。請關(guān)注微信公眾號“newbe技術(shù)專欄”,搜索對應(yīng)文章代碼內(nèi)容。

并且由兩個不同的實現(xiàn)
Bilibili 代碼塊無法正常渲染,因此無法正常顯示。請關(guān)注微信公眾號“newbe技術(shù)專欄”,搜索對應(yīng)文章代碼內(nèi)容。

我有一個服務(wù),需要使用這兩種序列化器中的一種。
Bilibili 代碼塊無法正常渲染,因此無法正常顯示。請關(guān)注微信公眾號“newbe技術(shù)專欄”,搜索對應(yīng)文章代碼內(nèi)容。

使用委托來定義獲取服務(wù)的方法
我們可以通過委托來定義獲取服務(wù)的方法,如下
Bilibili 代碼塊無法正常渲染,因此無法正常顯示。請關(guān)注微信公眾號“newbe技術(shù)專欄”,搜索對應(yīng)文章代碼內(nèi)容。

然后在 ConfigureServices
方法中注冊
Bilibili 代碼塊無法正常渲染,因此無法正常顯示。請關(guān)注微信公眾號“newbe技術(shù)專欄”,搜索對應(yīng)文章代碼內(nèi)容。

這樣我們就可以在 MyService
中通過委托來獲取服務(wù)了
Bilibili 代碼塊無法正常渲染,因此無法正常顯示。請關(guān)注微信公眾號“newbe技術(shù)專欄”,搜索對應(yīng)文章代碼內(nèi)容。

基于配置來改變工廠
因為本質(zhì)是通過委托來獲取服務(wù),所以我們可以通過配置來改變委托的行為,如下
Bilibili 代碼塊無法正常渲染,因此無法正常顯示。請關(guān)注微信公眾號“newbe技術(shù)專欄”,搜索對應(yīng)文章代碼內(nèi)容。

然后在 appsettings.json
中配置
Bilibili 代碼塊無法正常渲染,因此無法正常顯示。請關(guān)注微信公眾號“newbe技術(shù)專欄”,搜索對應(yīng)文章代碼內(nèi)容。

然后在 ConfigureServices
方法中注冊
Bilibili 代碼塊無法正常渲染,因此無法正常顯示。請關(guān)注微信公眾號“newbe技術(shù)專欄”,搜索對應(yīng)文章代碼內(nèi)容。

總結(jié)
本篇文章介紹了如何通過自定義工廠來實現(xiàn)基于 key 的服務(wù)獲取,這種方式在 aspnetcore 原生的 DI 中是原生支持的。
參考
Dependency injection guidelines1
感謝您的閱讀,如果您覺得本文有用,快長按右下角大拇指??為本文點贊~
歡迎關(guān)注作者的微信公眾號“newbe技術(shù)專欄”,獲取更多技術(shù)內(nèi)容。

本文作者: newbe36524
本文鏈接: https://www.newbe.pro/Others/0x023-aspnetcore-natively-implements-key-based-service-resolving/
版權(quán)聲明: 本博客所有文章除特別聲明外,均采用 BY-NC-SA 許可協(xié)議。轉(zhuǎn)載請注明出處!
https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection-guidelines?WT.mc_id=DX-MVP-5003606?