在项目中动态获取dbcontext EF

时间:2019-11-28 10:33:13

标签: c# asp.net asp.net-core .net-core

我有一个.Net Core项目,该项目为其他子项目提供NuGet软件包。 我想编写一种在项目中获取活动DBcontext的方法。

最新情况:

  

例如,我在主项目中创建方法 A

     

我生成了   NuGet包和所有子项目现在都可以使用方法 A ,但在   每个项目,我们都有不同的条件和情况,所以他们必须   是通用的,我处于要访问Dbcontexts的情况   动态地

所有项目都具有相同的结构,并且它们都使用依赖注入,那么是否有任何方法可以访问Ioc或注入并获取Dbcontexts,或者还有其他更好的方法可用?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案 通过注入 IServiceCollection ,您可以访问所有服务描述符集合。

public class CoreClass
{
 protected IServiceCollection _serviceDescriptors;

 public CoreClass(IServiceCollection serviceDescriptors)
 {
        _serviceDescriptors = serviceDescriptors;
 }

   private List<DbContext> GetContexts()
  {
        StringBuilder sb = new StringBuilder();
        List<DbContext> listdb = new List<DbContext>();
        foreach (ServiceDescriptor sd in _serviceDescriptors
            .Where(s => s.ServiceType.IsSubclassOf(typeof(DbContext))))
        {
            sb.Append(sd.ServiceType.Name).Append(": ").AppendLine(
                ((DbContext)HttpContext.RequestServices.GetService(sd.ServiceType))?.Database.GetDbConnection().ConnectionString);
            listdb.Add((DbContext)HttpContext.RequestServices.GetService(sd.ServiceType));
        }
        return listdb;
    }
}