當您創建常規的 .NET 5 或 6 API 專案時,您會獲得一些基本類,例如Program.cs和Startup.cs. 我想在一個類專案中復制它,因為我希望能夠配置我的服務以進行依賴注入,但我不希望我的專案中有任何控制器或 HTTP。例如,假設我想使用最少的 API/托管創建一個 .NET 6 專案,并且我想檢查目錄中的檔案更改:
程式.cs
static async Task Main(string[] args)
{
await CreateHostBuilder(args).Build().RunAsync();
}
static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((_, services) => ConfigureServices(services));
static void ConfigureServices(IServiceCollection services)
{
services.AddTranscient<IFileListener, FileListener>();
}
這可能是一個很好的起點,這與Startup.csAPI 專案非常相似。
在我的FileListener課堂上,我想呼叫一個方法,用于偵聽檔案夾中的檔案更改。讓我們稱之為StartListening()。我會在哪里呼叫該方法?在某些時候,我想我需要做一些類似的事情:
var fileListenerService = ((IServiceCollection)services).BuildServiceProvider().GetService<IListener>();
await fileListenerService.StartListening();
但是哪里?方法里面Main?里面ConfigureServices?別的地方?
也許我看錯了,但基本上我只需要呼叫一個方法并讓它運行該方法,直到應用程式關閉。
uj5u.com熱心網友回復:
Microsoft 的托管有一個托管服務的概念來處理后臺任務,因此您可以將您的FileListener托管服務轉換為托管服務并將其注冊到 DI 中AddHostedService,托管將自動啟動它并提供 DI 和取消信號支持。
請注意,使用托管服務中的作用域服務需要一些額外的作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/419866.html
標籤:
