ASP.NET Core 6 啟動時立刻執行特定程式碼

有些事情需要在 Server 啟動時馬上執行,例如執行環境檢查、資料庫塞入預設值等。

既然要在啟動時就執行,那應該就是寫在 Program.cs 了吧? 只是該怎麼注入需要的依賴呢?

假設要執行的是 MyService 裡面的 Create 方法,在 MyService 內需要注入 ILogger
    
public class MyService
{
    private readonly ILogger<MyService> _logger;

    public MyService(ILogger<MyService> logger)
    {
        _logger = logger;
    }
    
    public void Create()
    {
        _logger.LogInformation("Create");
    }
    
}
    

在 Program.cs 中會需要確保有向依賴注入(DI)容器註冊 MyService 服務:
    
builder.Services.AddScoped<MyService>();
    

然後在 builder.Build() 後面就可以取得 MyService 的實例並執行
    
var app = builder.Build();


using (var serviceScope = app.Services.CreateScope())
{
    try
    {
        var serviceProvider = serviceScope.ServiceProvider;
        var myService = serviceProvider.GetRequiredService<MyService>();
        myService.Create();
    }
    catch (Exception ex)
    {
        Log.Error(ex, "Initialize MyService failed");
    }
}
    

這樣在 ASP.NET Core 一啟動後就會執行 MyService 的 Create 方法了!

留言