dependency-injection - 使用 Autofac 注入(inject)特定类型

标签 dependency-injection inversion-of-control ioc-container autofac

我想在满足某些条件时注入(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/

相关文章:

c# - 在 Asp .Net MVC Composition Root 中配置 IoC 容器的最佳实践

Spring @Autowired 混淆(容器或 session )

c# - AuthorizationOptions 的依赖注入(inject)

c# - 如何解析 Orchard CMS 中的对象?

python - SQLAlchemy/Python : Using an engine per process, 并将该引擎注入(inject)依赖项

dependency-injection - 如何使用 Microsoft.Extensions.DependencyInjection 注册装饰器?

caSTLe-windsor - IoC容器适用性/场景演示?

angularjs - 使用 karma 在 angular2 中运行测试时失败 : No provider for Reflector! 错误

java - 绑定(bind)多个实现,具体取决于主机类

asp.net-mvc-3 - MVC2 到 MVC3 IOC 问题