C# 如何注入通用接口的多个实例?

C# 如何注入通用接口的多个实例?,c#,generics,asp.net-core,dependency-injection,.net-core,C#,Generics,Asp.net Core,Dependency Injection,.net Core,我有这样一个界面: public interface IService<T> { void DoSomething(T obj) } 公共接口iSeries设备 { 无效剂量测定法(T obj) } 以及一些实现: public class ServiceA : IService<A> { public void DoSomething(A a) } public class ServiceB : IService&l

我有这样一个界面:

public interface IService<T>  
{  
    void DoSomething(T obj)  
}  
公共接口iSeries设备
{  
无效剂量测定法(T obj)
}  
以及一些实现:

public class ServiceA : IService<A>
{  
    public void DoSomething(A a)  
} 
public class ServiceB : IService<B>  
{  
    public void DoSomething(B b)  
}
公共类服务A:iSeries设备
{  
公共无效剂量测定(A)
} 
公共类服务B:iSeries设备
{  
公共无效剂量测定(B)
}

如何在消费类的构造函数中注入实现IService的所有实例

您需要将
IServiceProvider
注入消费者,然后使用类似
serviceProvider.GetRequiredService()
的解析方法解析已注册的通用服务


它违反了某种形式的DI原则,但却是在方法内部获得正确实现的方法。否则,您必须创建一个完整的类(
Consumer
),该类在工厂注册,并执行类似的调用来设置
Consumer

,您需要将
IServiceProvider
注入到您的使用者中,然后使用类似于
serviceProvider.GetRequiredService()的解析方法
解析已注册的通用服务


它违反了某种形式的DI原则,但却是在方法内部获得正确实现的方法。否则,您必须创建一个完整的类(
Consumer
)这是在一个工厂注册的,该工厂执行类似的调用来设置
消费者

如果您不关心通用参数,为什么不创建iSeries的非通用版本?iSeries的DoSomething方法必须在不同的实现中具有不同的类型参数,并且必须在消费者服务中调用。它可以注入特定类型的集合,例如,
IEnumerable
将获取所有
iSeries设备
。我不确定这是否适用于开放泛型,例如,
IEnumerable
,但值得一试。如果您不关心泛型参数,为什么不创建IService的非泛型版本?IService DoSomething方法必须在不同的实现中具有不同的类型参数,并且必须在使用者中调用服务。可以注入特定类型的集合,例如,
IEnumerable
将获取所有
iSeries设备
。我不确定这是否适用于开放泛型,例如
IEnumerable
,但值得一试。