当前位置: 首页 > 知识库问答 >
问题:

ASP NET核心依赖注入中如何获取所有注册的DbContext(或服务)

江新
2023-03-14

我有一个ASP。NET核心2.1站点,注册了几个DbContext和一些条件连接字符串。

出于调试目的,我想列出所有注册的<code>DbContext</code>及其连接字符串,以确保所有内容都配置良好。

这只是一个“测试”功能,不用于任何其他用途,因此请不要回答“您不应该这样做”、“它是反模式”等。

共有1个答案

从经略
2023-03-14

我找到了这样做的方法。

在Startup.cs中

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddSingleton<IServiceCollection>(services);
}

然后,显示所有注册的服务:

StringBuilder sb = new StringBuilder();
foreach (ServiceDescriptor sd in _SvcCollection.OrderBy(s=>s.ServiceType.Namespace).OrderBy(s=> s.ServiceType.Namespace.StartsWith("System")?0:s.ServiceType.Namespace.StartsWith("Microsoft.")?1:2))
{
    // sb.Append(sd.ServiceType.FullName) is not easy to read
    sb.Append(sd.ServiceType.NameSpace).Append(sd.ServiceType.Name);
    if(sd.ServiceType.IsGenericType)
        sb.Append("<")
          .Append(String.Join(",", sd.ServiceType.GenericTypeArguments.Select(a => a.Name)))
          .Append(">");

    sb.Append(": ").AppendLine(sd.LifeTime);
}

显示使用其连接字符串注册的所有 DbContext:

StringBuilder sb = new StringBuilder();
foreach (ServiceDescriptor sd in _SvcCollection.Where(s => s.ServiceType.IsSubclassOf(typeof(DbContext))))
{
    sb.Append(sd.ServiceType.Name).Append(": ").AppendLine(((DbContext)HttpContext.RequestServices.GetService(sd.ServiceType))?.Database.GetDbConnection().ConnectionString);
}
 类似资料:
  • 我有一个.NET core项目,并且正在尝试使用授权选项创建自定义策略,如此处的文档所示: ASP.NET.Core授权-需求处理程序中的依赖注入 这些示例显示了使用 1 个参数(一个简单的 int 值)设置授权要求。我的自定义要求需要一个字符串参数以及一个 DbContext 对象。我想在运行时将 DbContext 注入到需求的构造函数中。我正在使用 Autofac 容器。我不确定如何实现这一

  • 如何在.NET核心库项目中将一个类注入另一个类?在API项目中的StartUp类ConfigureServices中,我应该在哪里配置DI?

  • 问题内容: 我可以 在运行时 获取所有已注册指令,服务,控制器等的列表。。。? 问题答案: 您可以获取每个模块的提供者列表(即服务/指令/控制器/工厂/等),尽管该列表是一种含糊不清的形式。 说您有以下几点: 然后,变量将包含一个名为的属性,该属性将包含该模块中所有提供程序的数组。该会是这个样子: 因此,您可以针对其中包含的每个提供程序进行搜索。 但这仅包含该特定模块的提供程序列表。如果要获取所有

  • 我的大多数服务通常与crud方法相同

  • 注册中心 设置注册中心 修改config/service.php中的registry_address.目前只支持Zookeeper、Redis、Mysql注册中心 Zookeeper注册中心 Zookeeper扩展安装 'registry_address' => [ 'scheme' => 'zookeeper', 'host' => '127.0.0.1',

  • 我想知道如何在ASP中处理依赖注入。NET核心,用于同时具有对象和字符串作为参数的类型。由于字符串无法注册到DI框架,我目前正在使用implementationfactory并使用服务定位器模式,还有其他方法吗?是否有类似于Autofac的命名参数的.WithParameter? Asp.net核心DI使得向DI框架注册一个类型变得容易(并且干净),对于那些已经向DI框架注册了参数的类型。 给定以