Keyed services (.NET 8) — register multiple implementations of an interface with keys.
Registration:
1builder.Services.AddKeyedSingleton<ICacheProvider, RedisCache>("redis");2builder.Services.AddKeyedSingleton<ICacheProvider, MemoryCache>("memory");34builder.Services.AddKeyedScoped<IEmailSender, SendGridEmailSender>("sendgrid");5builder.Services.AddKeyedScoped<IEmailSender, SmtpEmailSender>("smtp");
Injection:
1public class OrderService(2 [FromKeyedServices("redis")] ICacheProvider cache)3{4}56// Manual resolution7var cache = provider.GetKeyedService<ICacheProvider>("redis");8var required = provider.GetRequiredKeyedService<ICacheProvider>("redis");
Attribute injection:
1[ApiController]2[Route("api/[controller]")]3public class NotificationsController(4 [FromKeyedServices("email")] INotifier email,5 [FromKeyedServices("sms")] INotifier sms) : ControllerBase6{7}
Use cases: