13

有没有办法使用 [simple-injector] 注册一个由多个具体类实现的单个接口,而不使用模板接口?

假设我们有 2 个类MyClass1Myclass2并且这两个类都在实现IInterface1

现在使用 [simple-injector] 我们无法做到这一点

container.Register<IInterface1, Myclass1>();
container.Register<IInterface1, Myclass2>();

将现有接口转换为模板接口在现有代码库上是一项艰巨的工作。希望那里有一些更容易。

4

2 回答 2

18

您可以使用该RegisterCollection方法注册同一接口的多个实现(请参阅文档:配置要返回的实例集合)

所以你需要写:

container.Collection.Register<IInterface1>(typeof(Myclass1), typeof(Myclass2));

现在 Simple Injector 可以将一组Interface1实现注入到您的构造函数中,例如:

public class Foo
{
    public Foo(IEnumerable<IInterface1> interfaces)
    {
        //...
    }
}

或者您可以使用以下命令明确解决您的IInterface1实现GetAllInstances

var myClasses = container.GetAllInstances<IInterface1>();
于 2013-07-26T19:47:32.140 回答
0

我面临着同样的问题。我找到了一种解决方法,您可以根据消费者选择实现(我希望反过来!)。请参见下面的示例:

container.RegisterConditional<IInterface1, Myclass1>(
            c => c.Consumer.ImplementationType == typeof(Myclass2Service));
container.RegisterConditional<IInterface1, Myclass2>(
            c => c.Consumer.ImplementationType == typeof(Myclass2Service));
于 2019-08-20T21:46:16.387 回答