有些事情需要在 Server 啟動時馬上執行,例如執行環境檢查、資料庫塞入預設值等。
既然要在啟動時就執行,那應該就是寫在 Program.cs 了吧? 只是該怎麼注入需要的依賴呢?
假設要執行的是 MyService 裡面的 Create 方法,在 MyService 內需要注入 ILogger
在 Program.cs 中會需要確保有向依賴注入(DI)容器註冊 MyService 服務:
然後在 builder.Build() 後面就可以取得 MyService 的實例並執行
這樣在 ASP.NET Core 一啟動後就會執行 MyService 的 Create 方法了!
既然要在啟動時就執行,那應該就是寫在 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 方法了!
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com