为什么MyService中的DbContext(ASP.NET)为null?

Olg*_*lga 3 c# startup dbcontext asp.net-core-mvc asp.net-core

我使用c#,ASP.NET Core,EF.

我有Startup.cs:

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

我有控制器:

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();
        }
}
Run Code Online (Sandbox Code Playgroud)

我有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();
        }
  }
Run Code Online (Sandbox Code Playgroud)

HomeController正常工作:_db不为null.

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

UP:

public class OtherController : Controller
{
    ....
    MyService.GetOtherValue();
    ....
}
Run Code Online (Sandbox Code Playgroud)

mie*_*ooy 5

您不是在任何地方注入您的服务.

你只需使用静态方法,因此永远不会调用构造函数.您可以通过构造函数注入.

首先将服务添加到ASP.Net Core容器中:

services.AddScoped<MyService, MyService>();
Run Code Online (Sandbox Code Playgroud)

然后通过构造函数在控制器类中注入:

public class HomeController : Controller
{
    private readonly MyService _myService;

    public HomeController (MyService myService)
    {
        _myService = myService;
    }
}
Run Code Online (Sandbox Code Playgroud)

MyService每个requests(AddScoped())都会创建一个类.然后您DbContext将自动创建.

阅读有关.NET Core中DI的更多信息