using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Serilog; using Volo.Abp; using Win_in.Sfs.Auth.Data; namespace Win_in.Sfs.Auth.DbMigrator; public class DbMigratorHostedService : IHostedService { private readonly IHostApplicationLifetime _hostApplicationLifetime; private readonly IConfiguration _configuration; public DbMigratorHostedService(IHostApplicationLifetime hostApplicationLifetime, IConfiguration configuration) { _hostApplicationLifetime = hostApplicationLifetime; _configuration = configuration; } public async Task StartAsync(CancellationToken cancellationToken) { using (var application = AbpApplicationFactory.Create(options => { options.Services.ReplaceConfiguration(_configuration); options.UseAutofac(); options.Services.AddLogging(c => c.AddSerilog()); })) { application.Initialize(); await application .ServiceProvider .GetRequiredService() .MigrateAsync().ConfigureAwait(false); application.Shutdown(); _hostApplicationLifetime.StopApplication(); } } public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; }