Unity, Autofa c и, возможно, довольно много других пакетов внедрения зависимостей - все они поддерживают «контейнеры внедрения ключевых зависимостей», которые позволяют регистрировать несколько реализаций интерфейса и однозначно идентифицировать их по ключу (будь то строка, int , перечисление или что-то еще).
Однако. NET Ядро, насколько я вижу, по крайней мере, не имеет такой функции, и если бы я попытался реализовать что-то подобное, мне пришлось бы сделать обходной путь или найди для него какие-нибудь хакерские решения. Мне интересно, есть ли конкретная причина, по которой это не было введено. NET Core?
Пример Unity:
container.RegisterType<IService, ServiceImplementation1>("1");
container.RegisterType<IService, ServiceImplementation2>("2");
Autofa c пример:
builder.RegisterType<ServiceImplementation1>().Keyed<IService>("1");
builder.RegisterType<ServiceImplementation2>().Keyed<IService>("2");