在我的一项服务中,我需要获得所有提供的服务.所以我试着:

public ServiceConstructor(IServiceProvider serviceProvider) {
    _serviceProvider = serviceProvider;
    var allServices = _serviceProvider.GetServices<object>();

但我总是得不到任何服务. 如果我请求一个特定的服务,这个服务会被返回,所以有注册的服务.

我甚至试图从我要求的单一界面继承我的所有服务,但没有成功.

推荐答案

我不认为获取所有服务是个好主意,但您可以try 首先从程序集中获取类型名称.

    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {

        private readonly IServiceProvider serviceProvider;

        public ValuesController(IServiceProvider serviceProvider)
        {

            this.serviceProvider = serviceProvider;
        }
        [HttpGet]
        public void test()
        {
            
            var types = AppDomain.CurrentDomain.GetAssemblies()
                 .SelectMany(s => s.GetTypes())
                 .ToList();
            foreach(var type in types)
            {
                try
                {
                    var instance = serviceProvider.GetService(type);
                    if (instance != null)
                    {
                        Console.WriteLine(instance.ToString());
                    }
                }
                catch
                {

                }
            }
        }
    }

Test
enter image description here

Csharp相关问答推荐

PostingAsJsonAschange在从调用的方法返回时给出500错误

.NET框架4.7.2项目如何引用.NET Core 2.2库?

使用变量子根名称在C#中重新初始化SON文件

Unity如何在PlayerPrefs中保存数据?

ASP.NET MVC购物车数量更新并从购物车中删除项目

通过EFCore上传大量数据.

EF Core. Income和. AsNoTracking正确用法

读取配置文件(mytest. exe. config)

当我使用NET6作为目标框架时,为什么DotNet使用NET8作为MS包?

如何在Parall.ForEachAsync中使用CancerationTokenSource

如何忽略API JSON响应中的空字符串?

如何在C#中从正则表达式中匹配一些数字但排除一些常量(也是数字)

如何从ASP.NET核心MVC视图和Blazor传递数据

具有可空类型的C#NOTNULL约束具有意外行为

在Windows Plesk上发布ASP.NET Core 7 Web API-错误:无法加载文件或程序集';Microsoft.Data.SqlClient';

如何将%{v_扩展}转换为%{v_扩展}>>

如何让游戏对象在切换场景时被销毁,但在开始新游戏时重新锁定

如何使用IHostedService添加数据种子方法

如何从SignalR获取连接客户端的域

反序列化我以前使用System.Text.Json序列化的文件时出现异常