我想在满足某些条件时注入(inject)特定类型。例如,我有一个如下所示的界面。
public interface IMyInterface{
}
还有两个实现此接口(interface)的类
public class MyClassA : IMyInterface {
}
和
public class MyClassB : IMyInterface {
}
最后,我有一些服务类,它获取构造函数参数作为 IMyInterface。
public class ServiceA{
private IMyInterface _interfaceClass;
public ServiceA(IMyInterface interfaceClass){
_interfaceClass = interfaceClass
}
}
和
public class ServiceB{
private IMyInterface _interfaceClass;
public ServiceA(IMyInterface interfaceClass){
_interfaceClass = interfaceClass
}
}
现在,由于某些架构限制,ServiceA 必须获取 MyClassA 作为构造函数参数,ServiceB 必须获取 MyClassB 作为构造函数参数。
通常我使用 Autofac 如下
var builder = new ContainerBuilder();
builder.RegisterType<MyClassA>().As<IMyInterface>().InstancePerApiRequest();
但我找不到如何强制 Autofac 为特定类型选择正确类型的方法。
我查看了Named<>
功能但无法解决问题。
最佳答案
听起来你违反了里氏替换原则
Now because of some architectural constraints ServiceA must get MyClassA as constructor parameter and ServiceB must get MyClassB as constructor parameter.
我不确定 Autofac 支持基于上下文的注入(inject) - 为什么不让每个服务依赖于它所需的实现?
public class ServiceA
{
private IMyInterface _interfaceClass;
public ServiceA(MyClassA interfaceClass)
{
_interfaceClass = interfaceClass
}
}
关于dependency-injection - 使用 Autofac 注入(inject)特定类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16699588/