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)
您不是在任何地方注入您的服务.
你只需使用静态方法,因此永远不会调用构造函数.您可以通过构造函数注入.
首先将服务添加到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将自动创建.
| 归档时间: |
|
| 查看次数: |
366 次 |
| 最近记录: |