我有一个aspnetcore应用程序.
在启动期间,它执行常规的启动操作.
完成这些操作后,我需要进行一些验证以确保其设置正确.特别是,我需要使用默认连接字符串在数据库中调用存储过程.换句话说,我需要创建一个使用依赖注入的类,以便在调用它之前完成.
只是不确定将这些代码放在StartUp中的位置.
Jer*_*man 13
从 .net core 2.0 开始,您可能应该实现自己的IHostedService. 每个注册IHostedService都将按照注册的顺序开始。如果它们失败,可能会导致主机无法启动。
由于您希望执行数据库操作,因此还应该创建一个新的服务范围来控制数据库连接的生命周期。
public class StartupService : IHostedService{
private IServiceProvider services;
public StartupService(IServiceProvider services){
this.services = services;
}
public async Task StartAsync(CancellationToken cancellationToken)
{
using var scope = serviceProvider.CreateScope();
using var context = scope.ServiceProvider.GetRequiredService<...>();
... do work here
}
}
// then in configure services
services.AddHostedService<StartupService>();
Run Code Online (Sandbox Code Playgroud)
请注意,EF Core 5 引入了IDbContextFactory,它可用于在任何 DI 服务范围之外创建上下文。
这个问题的其他每个答案都将在配置 Web 服务器时运行,这也是在IHostedService.
可能最好的地方是一个接一个的Configure方法UseMvc().这也是您经常应用迁移的地方.您可以添加DI知道为参数的任意数量的类.
例如:
public void Configure(IApplicationBuilder app)
Run Code Online (Sandbox Code Playgroud)
要么
public void Configure(IApplicationBuilder app, AppUserManager userManager, IServiceProvider serviceProvider)
Run Code Online (Sandbox Code Playgroud)
要么
public void Configure(IApplicationBuilder app, MyDbContext context)
Run Code Online (Sandbox Code Playgroud)
如果你想在后台检查这个(只有你不关心结果 - 如果验证失败也应该运行应用程序),请在此处查看我的答案.
另外这个答案可以帮助你.
或使用IStartupFilter.
这主要用于配置中间件,但应该允许您在配置结束后执行操作。
| 归档时间: |
|
| 查看次数: |
4403 次 |
| 最近记录: |