如何在 Asp.Net Core 中注册同一接口的多个实现

假如你有三个类实现了同一接口:

public interface IService { }
public class ServiceA : IService { }
public class ServiceB : IService { } 
public class ServiceC : IService { }

你的一个选择是使用Microsoft.Extensions.DependencyInjection的扩展方法GetServices

注册服务:

services.AddSingleton<IService, ServiceA>();
services.AddSingleton<IService, ServiceB>();
services.AddSingleton<IService, ServiceC>();

使用Linq获取服务:

var services = serviceProvider.GetServices<IService>();
var serviceB = services.First(o => o.GetType() == typeof(ServiceB));

或者

var serviceZ = services.First(o => o.Name.Equals("xxx"));

这里假设IService有一个属性名为Name