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

Nav*_*tor 5 dbcontext asp.net-core-2.0

在我的控制器中,我有这个

private readonly DbContext _context;

public CountryController(DbContext context)
{
    _context = context;
}
Run Code Online (Sandbox Code Playgroud)

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

Pie*_*ier 1

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

public interface IMyService
{
    void Test1();
}
Run Code Online (Sandbox Code Playgroud)

然后,您需要创建实现该接口的服务类。请注意,您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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

    services.AddSingleton<IMyService, MyService>();

    // other initialization code omitted
}
Run Code Online (Sandbox Code Playgroud)

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