什么是Keyed service
Keyed service是指,为一个需要注入的服务定义一个Key Name,并使用使用Key Name检索依赖项注入 (DI) 服务的机制。
使用方法
通过调用 AddKeyedSingleton (或 AddKeyedScoped 或 AddKeyedTransient)来注册服务,与Key Name相关联。或使用 [FromKeyedServices] 属性指定密钥来访问已注册的服务。
以下代码演示如何使用Keyed service:
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; var builder = WebApplication.CreateBuilder(args); builder.Services.AddKeyedSingleton<ICache, BigCache>("big"); builder.Services.AddKeyedSingleton<ICache, SmallCache>("small"); builder.Services.AddControllers(); var app = builder.Build(); app.MapGet("/big", ([FromKeyedServices("big")] ICache bigCache) => bigCache.Get("date")); app.MapGet("/small", ([FromKeyedServices("small")] ICache smallCache) => smallCache.Get("date")); app.MapControllers(); app.Run(); public interface ICache { object Get(string key); } public class BigCache : ICache { public object Get(string key) => $"Resolving {key} from big cache."; } public class SmallCache : ICache { public object Get(string key) => $"Resolving {key} from small cache."; } [ApiController] [Route("/cache")] public class CustomServicesApiController : Controller { [HttpGet("big-cache")] public ActionResult<object> GetOk([FromKeyedServices("big")] ICache cache) { return cache.Get("data-mvc"); } } public class MyHub : Hub { public void Method([FromKeyedServices("small")] ICache cache) { Console.WriteLine(cache.Get("signalr")); } }
Blazor中的支持
Blazor 现在支持使用 [Inject] 属性注入Keyed Service。 Keyed Service在使用依赖项注入时界定服务的注册和使用范围。
使用新 InjectAttribute.Key 属性指定服务要注入的Service:
使用新 InjectAttribute.Key 属性指定服务要注入的Service:
[Inject(Key = "my-service")] public IMyService MyService { get; set; }
@inject Razor 指令尚不支持Keyed Service,但将来的版本会对此进行改进。

合集:
.NET8
分类:
.NET Core+
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战