gpt4 book ai didi

c# - 为什么 MyService 中的 DbContext (ASP.NET) 为空?

转载 作者:行者123 更新时间:2023-11-30 14:45:27 25 4
gpt4 key购买 nike

我使用 c#、ASP.NET Core、EF。

我有 Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
...
}

我有 Controller :

public class HomeController : Controller
{
public AppDbContext _db;

public HomeController(AppDbContext db)
{
_db = db;
}

public IActionResult Index()
{
// _db is NOT NULL
var d = _db.Users.FirstOrDefault();
}
}

我有 MyService.cs 类:

public class MyService
{
public static AppDbContext _db;

public MyService(AppDbContext db)
{
_db = db;
}

public static void GetOtherValue()
{
// _db is NULL
var d = _db.Users.FirstOrDefault();
}
}

HomeController 工作正常:_db 不为空。

为什么变量 _db 在 MyService.cs 中为 null?如何解决?

向上:

public class OtherController : Controller
{
....
MyService.GetOtherValue();
....
}

最佳答案

您没有在任何地方注入(inject)您的服务。

您只使用静态方法,因此永远不会调用构造函数。您可以通过构造函数注入(inject)。

首先在 ASP.Net Core 容器中添加一个服务:

services.AddScoped<MyService, MyService>();

然后在你的 Controller 类中通过构造函数注入(inject):

public class HomeController : Controller
{
private readonly MyService _myService;

public HomeController (MyService myService)
{
_myService = myService;
}
}

MyService 类将在每次请求时创建(AddScoped())。然后您的 DbContext 将自动创建。

Read more about DI in .NET Core

关于c# - 为什么 MyService 中的 DbContext (ASP.NET) 为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53509527/

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