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
![Output image]()
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)