依賴注入接口多實(shí)現(xiàn)如何獲取指定服務(wù)
原為鏈接 http://www.rzrgm.cn/ysmc/p/18794061
在上一個文章中,我們講過 鍵控服務(wù) 服務(wù),可惜的是這個需要 .NET 8 才能使用,那我們在 .NET 8 之前應(yīng)該怎么找到我們需要的服務(wù)呢,本文給大家講講使用特性的方式
本人依舊秉承著短小精悍,廢話不多,直接上代碼!
首先,我們寫一個特性,自定義特性需要繼承 Attribute,并且我們給一個只能 get 的 public 的屬性,用于后續(xù)獲取指定服務(wù)使用
public class ServerKeyAttribute : Attribute { public string Key { get; } public ServerKeyAttribute(string key) { Key = key; } }
隨便定義一個接口
public interface ITestService { Task GetValue(); }
然后就是多寫幾個實(shí)現(xiàn),并且使用上面的自定義特性
[ServerKey("Test1")] public class Test1Service : ITestService { public void GetValue() { Console.WriteLine("Test1"); } } [ServerKey("Test2")] public class Test2Service : ITestService { public void GetValue() { Console.WriteLine("Test2"); } } [ServerKey("Test3")] public class Test3Service : ITestService { public void GetValue() { Console.WriteLine("Test3"); } }
注冊服務(wù)
builder.Services.AddTransient<ITestService, Test1Service>(); builder.Services.AddTransient<ITestService, Test2Service>(); builder.Services.AddTransient<ITestService, Test3Service>();
最后我們簡單點(diǎn),在 Controller 中獲取指定服務(wù),因?yàn)槲冶容^懶
1 [HttpGet("GetServers")] 2 public async Task GetServers([FromServices] IEnumerable<ITestService> testServices) 3 { 4 foreach (var service in testServices) 5 { 6 var attributes = service.GetType().GetCustomAttributes(typeof(ServerKeyAttribute), false) as IEnumerable<ServerKeyAttribute>; 7 if (attributes != null && attributes.Any()) 8 { 9 if (attributes.Any(x => x.Key == "Test2")) 10 { 11 service.GetValue(); 12 } 13 } 14 } 15 16 await Task.CompletedTask; 17 }
結(jié)果

好嘞,完事,是不是非常簡單,非常感謝各位大佬的觀看
本文來自博客園,作者:一事冇誠,轉(zhuǎn)載請注明原文鏈接:http://www.rzrgm.cn/ysmc/p/18794061

浙公網(wǎng)安備 33010602011771號