我有一个.Net Core项目,该项目为其他子项目提供NuGet软件包。 我想编写一种在项目中获取活动DBcontext的方法。
最新情况:
例如,我在主项目中创建方法 A 。
我生成了 NuGet包和所有子项目现在都可以使用方法 A ,但在 每个项目,我们都有不同的条件和情况,所以他们必须 是通用的,我处于要访问Dbcontexts的情况 动态地
所有项目都具有相同的结构,并且它们都使用依赖注入,那么是否有任何方法可以访问Ioc或注入并获取Dbcontexts,或者还有其他更好的方法可用?
答案 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;
}
}