Я нашел способ сделать это.
В 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);
}