在 ASP.NET Core 啟動後有些程式需要被執行一次,例如: 環境檢查(資料庫連接、外部 API 測試)、預設資料寫入等等。
實現的方式也有很多種,例如使用 IHostedService 的 StartAsync (最初啟動時)、IHostApplicationLifetime 的 ApplicationStarted (啟動完畢)、IStartupFilter (主要用於修改中介軟體)。不過本篇要介紹的是最簡單的一種方式,直接在 Program.cs 中執行。
EnvironmentService.cs,自建服務,要被執行的程式碼:
Program.cs,註冊並執行服務:
在 Program.cs 中先註冊服務,就可以在程式建立後呼叫服務並執行。
在 Entity Framework 7 中要驗證資料庫是否可以連線可以使用下面的程式碼:
註: 如果是 ASP.NET Core 3.1 的話原先寫在 Program.cs 的部分則是該在 Startup.cs :
實現的方式也有很多種,例如使用 IHostedService 的 StartAsync (最初啟動時)、IHostApplicationLifetime 的 ApplicationStarted (啟動完畢)、IStartupFilter (主要用於修改中介軟體)。不過本篇要介紹的是最簡單的一種方式,直接在 Program.cs 中執行。
EnvironmentService.cs,自建服務,要被執行的程式碼:
public class EnvironmentService
{
public void CheckDatabaseConnection()
{
// todo: do something
}
}
Program.cs,註冊並執行服務:
builder.Services.AddScoped<EnvironmentService>();
var app = builder.Build();
using (var serviceScope = app.Services.CreateScope())
{
var serviceProvider = serviceScope.ServiceProvider;
var sysParamService = serviceProvider.GetRequiredService<EnvironmentService>();
sysParamService.CheckDatabaseConnection();
}
在 Program.cs 中先註冊服務,就可以在程式建立後呼叫服務並執行。
在 Entity Framework 7 中要驗證資料庫是否可以連線可以使用下面的程式碼:
public class EnvironmentService
{
private readonly ILogger<EnvironmentService> _logger;
private readonly ApplicationDbContext _context;
public EnvironmentService(ILogger<EnvironmentService> logger, ApplicationDbContext context)
{
_logger = logger;
_context = context;
}
public bool CheckDatabaseConnection()
{
try
{
_logger.LogInformation("CheckDatabaseConnection");
_context.Database.CanConnect();
return true;
}
catch (Exception e)
{
_logger.LogError(e, "CheckDatabaseConnection");
return false;
}
}
}
註: 如果是 ASP.NET Core 3.1 的話原先寫在 Program.cs 的部分則是該在 Startup.cs :
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<EnvironmentService>();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
using (var serviceScope = app.ApplicationServices.CreateScope())
{
var serviceProvider = serviceScope.ServiceProvider;
var sysParamService = serviceProvider.GetRequiredService<EnvironmentService>();
sysParamService.CheckDatabaseConnection();
}
}
}
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com