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
,但值得一试。