using System.Collections.Generic;
public interface IService
public class ServiceA : IService
Console.WriteLine("Service A is executing.");
public class ServiceB : IService
Console.WriteLine("Service B is executing.");
private readonly Dictionary<Type, Type> _services = new Dictionary<Type, Type>();
public void Register<TService, TImplementation>()
_services[typeof(TService)] = typeof(TImplementation);
public TService Resolve<TService>()
if (_services.TryGetValue(typeof(TService), out Type implementationType))
return (TService)Activator.CreateInstance(implementationType);
throw new InvalidOperationException($"Service of type {typeof(TService)} is not registered.");
var container = new DIContainer();
container.Register<IService, ServiceA>();
container.Register<IService, ServiceB>();
Console.WriteLine("Expected:");
Console.WriteLine("Service A is executing.");
Console.WriteLine("Service B is executing.\n");
Console.WriteLine("Actual:");
var serviceA = container.Resolve<IService>();
var serviceB = container.Resolve<IService>();