如何在方法期间通过依赖注入从池中获取DbContext实例?

时间:2019-06-21 10:25:10

标签: c# .net entity-framework dependency-injection dbcontext

我希望在使用范围内在池中的函数中包含DbContext

我已经尝试将IServiceProvider添加到工厂,让工厂解析上下文并将其放入UoW,但是随后它告诉我在其他线程中使用了相同的包含。

services.AddDbContextPool<EmployeeContext>(options => options.UseSqlServer(connection));
...
using (var unitOfWork = factory.CreateUnitOfWork())
{
}

我想在使用依赖注入的DbContextPool的函数中创建工作单元范围。

1 个答案:

答案 0 :(得分:2)

您可以在方法内部创建一个范围,但首先必须将IServiceScopeFactory注入您的类。

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>();
        }
    }
}

请记住,当您放置示波器时,将丢弃您创建的对象。另外,如果不处理示波器,则会发生内存泄漏