Зарегистрировать несколько реализаций 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>();
