Зарегистрировать несколько реализаций c одним интерфейсом

есть ли способ зарегистрировать один интерфейс, который реализуется более чем одним конкретным классом с помощью [simple-injector] и без использования интерфейса шаблона?

скажем, у нас есть 2 классы MyClass1 и Myclass2 и оба этих класса реализуют IInterface1

теперь с помощью [простой инжектор] мы не смогли сделать это

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

преобразование существующего интерфейса в интерфейс шаблона-это своего рода сложная работа на существующей кодовой базе. Надеюсь, что есть там легче.

1 ответов


вы можете зарегистрировать несколько реализаций одного и того же интерфейса с помощью RegisterCollection метод (см. документация: настройка коллекции экземпляров для возврата)

поэтому вам нужно написать:

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

и теперь простой инжектор может впрыснуть собрание Interface1 реализация в вашем конструкторе, например:

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

или вы можете явно разрешить ваш IInterface1 реализаций с GetAllInstances:

var myClasses = container.GetAllInstances<IInterface1>();