日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Asp.NET Core 一个接口的多个实现如何通过 DI 注册?

發(fā)布時間:2023/12/4 asp.net 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Asp.NET Core 一个接口的多个实现如何通过 DI 注册? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

咨詢區(qū)

  • LP13

我有三個 Service 類實現(xiàn)了同一個接口,參考代碼如下:

public?interface?IService?{?} public?class?ServiceA?:?IService?{?} public?class?ServiceB?:?IService?{?}? public?class?ServiceC?:?IService?{?}

我知道像其他的 DI 容器,比如 Unity 是在注冊實現(xiàn)類的時候通過不同的key來區(qū)分,在 ASP.NET Core 中做 AddService 時并沒有看到 key 或 name 參數(shù)的重載方法。

public?void?ConfigureServices(IServiceCollection?services){????????????//?How?do?I?register?services?of?the?same?interface?????????????}public?MyController:Controller{public?void?DoSomething(string?key){?//?How?do?I?resolve?the?service?by?key?}}

請問我該如何實現(xiàn)呢?

回答區(qū)

  • Miguel A. Arilla

我也遇到了這種場景,不過我是用 Func 做了一個折中方案。

首先:定義一個 委托。

public?delegate?IService?ServiceResolver(string?key);

然后:在 Startup.cs 中做多個實現(xiàn)類注冊。

services.AddTransient<ServiceA>(); services.AddTransient<ServiceB>(); services.AddTransient<ServiceC>();services.AddTransient<ServiceResolver>(serviceProvider?=>?key?=> {switch?(key){case?"A":return?serviceProvider.GetService<ServiceA>();case?"B":return?serviceProvider.GetService<ServiceB>();case?"C":return?serviceProvider.GetService<ServiceC>();default:throw?new?KeyNotFoundException();?//?or?maybe?return?null,?up?to?you} });

后期:如果想使用的話,通過 key 從 Func 中提取具體的實例,參考代碼如下:

public?class?Consumer {private?readonly?IService?_aService;public?Consumer(ServiceResolver?serviceAccessor){_aService?=?serviceAccessor("A");}public?void?UseServiceA(){_aService.DoTheThing();} }

為了做演示目的,我這里只用了 string 作為解析,你可以根據(jù)自己的場景具體實現(xiàn)。

點評區(qū)

在 Asp.Net Core 中是不支持這種多注冊的,這就有點尷尬了,Miguel A. Arilla 大佬提供的方案不錯,學(xué)習(xí)了。

總結(jié)

以上是生活随笔為你收集整理的Asp.NET Core 一个接口的多个实现如何通过 DI 注册?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。