初学ASP。创建了一个应用程序,一切(包括db交互)工作正常,但我的应用程序应该包含后台服务,在启动时运行(然后工作,直到手动停止)。它应该能够访问dbcontext,并在任何用户输入之前加载数据。
似乎应该在ConfigureServices的某个地方创建并在配置中运行?
不太明白如何实现它导致依赖注入。主要问题-我不明白在哪里以及如何访问dbcontext。我所知道的唯一方法就是控制器,但这显然不是解决方案。
我知道100%有一个简单的解决方案,但找不到它,因为不知道该找什么。在参考/Microsoft文档上提供一些链接应该就足够了。
你应该像这样在ConfigureServices中注册你的DbContext:
Host.CreateDefaultBuilder(args)
ConfigureServices((hostContext, services) =>
{
// Example to add SqlServer DB Context
string connectionString = //for example load connection string from config
services.AddDbContext<MyDbContext>(o => o.UseSqlServer(connectionString));
}
像这样注册你的上下文之后,你就可以通过构造函数注入把它注入到你的其他服务中。
public class MyBackgroundService
{
private readonly IServiceScopeFactory _scopeFactory;
public MyBackgroundServcice(IServiceScopeFactory serviceScopeFactory)
{
_scopeFactory= serviceScopeFactory;
}
public MyData GetData()
{
using IServiceScope scope = _scopeFactory.CreateScope();
MyDbContext context = scope.ServiceProvider.GetService<MyDbContext>();
// Do something with context ...
}
}
架构方面,我还建议为你的数据库层实现一个服务,你可以在后台服务中注入,因为这样管理DbContext作用域会干净得多。