如何在方法期间使用依赖注入从池中获取 DbContext 的实例?
How to get a instance of DbContext from pool with dependency injection during method?
我想在使用范围期间在池中的函数中使用 DbContext
我已经尝试将 IServiceProvider 添加到工厂并让工厂解析上下文并将其放入 UoW 但随后它告诉我在其他线程中使用了相同的包含。
services.AddDbContextPool<EmployeeContext>(options => options.UseSqlServer(connection));
...
using (var unitOfWork = factory.CreateUnitOfWork())
{
}
我想在使用依赖注入的 DbContextPool 的函数中创建一个工作单元范围。
您可以在您的方法中创建一个范围,但首先您必须将 IServiceScopeFactory 注入到您的 class。
using Microsoft.Extensions.DependencyInjection;
public class SomeService
{
private readonly IServiceScopeFactory _serviceScopeFactory;
public SomeService(IServiceScopeFactory serviceScopeFactory)
{
_serviceScopeFactory = serviceScopeFactory;
}
public Task DoStuff()
{
using (var serviceScope = _serviceScopeFactory.CreateScope())
{
var unitOfWork = serviceScope.ServiceProvider.GetRequiredService<UnitOfWork>();
}
}
}
请记住,您创建的对象将在您释放作用域时被释放。另外,如果你不处理范围,你会得到内存泄漏
我想在使用范围期间在池中的函数中使用 DbContext
我已经尝试将 IServiceProvider 添加到工厂并让工厂解析上下文并将其放入 UoW 但随后它告诉我在其他线程中使用了相同的包含。
services.AddDbContextPool<EmployeeContext>(options => options.UseSqlServer(connection));
...
using (var unitOfWork = factory.CreateUnitOfWork())
{
}
我想在使用依赖注入的 DbContextPool 的函数中创建一个工作单元范围。
您可以在您的方法中创建一个范围,但首先您必须将 IServiceScopeFactory 注入到您的 class。
using Microsoft.Extensions.DependencyInjection;
public class SomeService
{
private readonly IServiceScopeFactory _serviceScopeFactory;
public SomeService(IServiceScopeFactory serviceScopeFactory)
{
_serviceScopeFactory = serviceScopeFactory;
}
public Task DoStuff()
{
using (var serviceScope = _serviceScopeFactory.CreateScope())
{
var unitOfWork = serviceScope.ServiceProvider.GetRequiredService<UnitOfWork>();
}
}
}
请记住,您创建的对象将在您释放作用域时被释放。另外,如果你不处理范围,你会得到内存泄漏