在另一个类asp.net核心2中访问DbContext

问题描述 投票:3回答:1

在我的控制器中我有这个

private readonly DbContext _context;

public CountryController(DbContext context)
{
    _context = context;
}

如何在静态类等其他类中检索DbContext,而不将参数作为参数传递给方法调用

dbcontext asp.net-core-2.0
1个回答
1
投票

您可以通过创建服务来创建DBContext的新实例。首先,您必须定义一个接口

public interface IMyService
{
    void Test1();
}

然后,您需要创建实现该接口的服务类。请注意,您向依赖注入者请求IServiceProvider

internal sealed class MyService : IMyService
{
    private readonly IServiceProvider m_ServiceProvider;
    // note here you ask to the injector for IServiceProvider
    public MyService(IServiceProvider serviceProvider)
    {
        if (serviceProvider == null)
            throw new ArgumentNullException(nameof(serviceProvider));
        m_ServiceProvider = serviceProvider;
    }

    public void Test1()
    {
        using (var serviceScope = m_ServiceProvider.CreateScope())
        {
            using (var context = serviceScope.ServiceProvider.GetService<DbContext>())
            {
                // you can access your DBContext instance
            }
        }
    }
}

最后,您指示运行时将单个服务创建新服务。这是在ConfigureServicesStartup.cs方法中完成的:

public void ConfigureServices(IServiceCollection services)
{
    // other initialization code omitted
    services.AddMvc();

    services.AddSingleton<IMyService, MyService>();

    // other initialization code omitted
}

请注意,MyService需要线程安全。

© www.soinside.com 2019 - 2024. All rights reserved.