使用Unity在同一构造函数中实现接口的多个实现

时间:2016-06-15 08:28:45

标签: .net dependency-injection unity-container

我的问题类似this question。然而,有一个重要的区别。我正在使用Unity Container。问题是我需要在同一个构造函数中使用两个接口实例。这些实例可以来自相同的实现,也可以来自不同的实现。下面是构造函数的简化版本。

public SomeService(IMyInterface instance1, IMyInterface instance2) : ISomeService

在我之前提到的问题中,不同的类中使用了不同的实现。但在我的情况下,我需要在一个班级中分离。

Unity可以实现吗?如果没有,是否有最近具有此功能的容器?

1 个答案:

答案 0 :(得分:1)

您可以使用命名注册和InjectionConstructor,如下所示:

container.RegisterType<IMyInterface, Impl1>("Impl1");
container.RegisterType<IMyInterface, Impl2>("Impl2");
container.RegisterType<ISomeService, SomeService>(
    new InjectionConstructor(
        new ResolvedParameter<IMyInterface>("Impl1"),
        new ResolvedParameter<IMyInterface>("Impl2")));

var service = container.Resolve<ISomeService>();

IMO,最好不要使用DI容器,而是在有&#34;复杂&#34;时使用Pure DI。像你在这里的对象图。有关详细信息,请参阅my article here