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

时间:2018-04-23 10:07:58

标签: c# generics asp.net-core dependency-injection .net-core

我有这样的界面:

public interface IService<T>  
{  
    void DoSomething(T obj)  
}  

以及几个实施:

public class ServiceA : IService<A>
{  
    public void DoSomething(A a)  
} 
public class ServiceB : IService<B>  
{  
    public void DoSomething(B b)  
}

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

1 个答案:

答案 0 :(得分:1)

您需要将IServiceProvider注入您的使用者,然后使用像serviceProvider.GetRequiredService<IService<T>>()这样的解析方法来解析已注册的通用服务。

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