我有一个aspnetcore应用程序。
在启动期间,它执行常规的启动操作。
完成这些操作后,我需要进行一些验证以确保其设置正确。特别是,我需要使用默认连接字符串在数据库中调用存储过程。换句话说,我需要创建一个使用依赖注入的类,以便在调用它之前完成它。
只是不确定在StartUp中放置此类代码的位置。
答案 0 :(得分:9)
在Configure
电话之后,UseMvc()
方法可能是最佳位置。这也是您经常应用迁移的地方。您可以添加DI知道的任何类作为参数
例如:
public void Configure(IApplicationBuilder app)
或
public void Configure(IApplicationBuilder app, AppUserManager userManager, IServiceProvider serviceProvider)
或
public void Configure(IApplicationBuilder app, MyDbContext context)
如果您想在后台进行检查(仅当您不关心结果时 - 如果验证失败也应运行应用程序),请检查my answer here。
this answer也可以帮助你。
答案 1 :(得分:2)
或使用public Class BookFromDB {
private List<Map<String, Object>> bookInfo;
}
。
这主要是用于配置中间件,但是应该允许您在配置结束后执行操作。
答案 2 :(得分:1)
从.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>();
请注意,EF Core 5引入了IDbContextFactory
,可用于在任何DI服务范围之外创建上下文。
此问题的其他每个答案都将在配置Web服务器时运行,该服务器也在IHostedService
中执行。