Introduction
.NET 8 Introduced Keyed Services in DI (Dependency Injection).
This feature allows the registration of multiple implementations of the same Interface within DI using a key.
The below methods are used for registering in Program.cs.
- AddKeyedSingleton
- AddKeyedScoped
- AddKeyedTransient
Example
1. Defining Interface
//ISample.cs
using System;
namespace KeyedServices.Abstract
{
public interface ISample
{
public void Display();
}
}
2. Defining classes
//Sample1.cs
using KeyedServices.Abstract;
namespace KeyedServices
{
public class Sample1 : ISample
{
public Sample1()
{
}
public void Display()
{
Console.WriteLine("Display from Sample 1");
}
}
}
// Sample2.cs
using KeyedServices.Abstract;
namespace KeyedServices
{
public class Sample2 : ISample
{
public Sample2()
{
}
public void Display()
{
Console.WriteLine("Display from Sample 2");
}
}
}
3. Registering Dependecies and Calling - Program.cs
using KeyedServices;
using KeyedServices.Abstract;
using Microsoft.Extensions.DependencyInjection;
public class Program
{
// Program.cs
public static void Main(string[] args)
{
var serviceProvider = new ServiceCollection()
.AddKeyedSingleton<ISample>("Sample1", new Sample1())
.AddKeyedSingleton<ISample>("Sample2", new Sample2())
.BuildServiceProvider();
var sample1 = serviceProvider.GetKeyedService<ISample>("Sample1");
var sample2 = serviceProvider.GetKeyedService<ISample>("Sample2");
// Calling Sample 1 instance.
sample1.Display();
// Calling Sample 2 instance.
sample2.Display();
Console.ReadLine();
}
}
4. Result
Conclusion
keyed Services provide a valuable addition to the DI system. This provides a flexible approach to dependency injection.
Github Link: Keyed-Services (github.com)