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