我有一个 ASP.NET Core 2.1 站点,其中注册了多个 DbContext 和一些条件连接字符串。
出于调试目的,我想列出所有已注册的 DbContext
及其连接字符串,以确保一切都已正确配置。
这只是一个“测试”功能,不用于任何其他用途,所以请不要回答“你不应该那样做”、“这是反模式”等。
最佳答案
我找到了一种方法。
在 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);
}
关于asp.net-core - 如何在 ASP NET Core 依赖注入(inject)中获取所有已注册的 DbContext(或服务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50816793/