如何从 IServiceProvider.GetServices<T> (aspnet core DI) 按基类型获取实例?

How to get instance by base type from IServiceProvider.GetServices<T> (aspnet core DI)?

我想获取所有从 IServiceProvider 继承 MyBaseClass 的服务:

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

我可以将所有派生的 类 注册为:

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

是否有任何方法可以通过一次注册完成此操作?

.NET Core 附带的依赖注入不允许开箱即用,您需要推出自定义扩展方法。

您可以这样注册您的服务:

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>();