gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:58:13 27 4
gpt4 key购买 nike

在我的 Controller 中,我有这个

private readonly DbContext _context;

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

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

最佳答案

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

public interface IMyService
{
void Test1();
}

然后,您需要创建实现该接口(interface)的服务类。请注意,您请求 IServiceProvider到依赖注入(inject)器。

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
}
}
}
}

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

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

services.AddSingleton<IMyService, MyService>();

// other initialization code omitted
}

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

关于dbcontext - 在另一个类 asp.net core 2 中访问 DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47971516/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com