如何从 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>();
我想获取所有从 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>();