Как получить экземпляр по базовому типу из IServiceProvider.GetServices <T>(как pnet core DI)? - PullRequest
1 голос
/ 19 февраля 2020

Я хотел бы получить все службы, которые наследуют MyBaseClass от IServiceProvider:

var myBaseClassInstances = serviceProvider.GetServices<MyBaseClass>();

Я могу зарегистрировать все производные классы как:

services.AddSingleton<InheritedFromMyBaseClass>();
services.AddSingleton<MyBaseClass>(serviceProvider => serviceProvider.GetService<InheritedFromMyBaseClass>());

Есть ли способы сделать это с одной регистрацией?

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Внедрение зависимостей, которое входит в комплект. NET Core не позволяет этого сразу после установки, вам необходимо развернуть свой собственный метод расширения.

0 голосов
/ 15 апреля 2020

Вы можете зарегистрировать свои услуги следующим образом:

services.AddSingleton<MyBaseClass, ImplementationA>();
services.AddSingleton<MyBaseClass, ImplementationB>();
services.AddSingleton<MyBaseClass, ImplementationC>();

или

services.AddTransient<MyBaseClass, ImplementationA>();
services.AddTransient<MyBaseClass, ImplementationB>();
services.AddTransient<MyBaseClass, ImplementationC>();

в зависимости от их объема ...

var instances = serviceProvider.GetServices<MyBaseClass>();
...