簡體   English   中英

C# HostedService 通過 IHost - 從運行的 ServicePool 中獲取實例

[英]C# HostedService through IHost - get Instance from running ServicePool

這個問題很簡單,但也很有挑戰性。

正常服務創建:

IHost host = Host.CreateDefaultBuilder(args)
                                .ConfigureServices(services =>
                                {
                                    services.AddHostedService<WorkerA>();
                                    services.AddHostedService<WorkerB>();
                                })
                                .Build();

await host.RunAsync();

現在,WorkerB 是否可以獲取 WorkerA 的“實例”來執行方法、檢索屬性等? 然而,是否有一個“全局”ServiceCollection 或 Servicepool 來查詢和檢索它的實例?

您可以執行以下操作:

services.AddSingleton<IHostedService, WorkerA>();
services.AddSingleton<IHostedService, WorkerB>();

現在WorkerB可以在其構造函數中注入WorkerA ,同時保證WorkerB獲得與 ASP.NET Core 用作托管服務相同的實例。

但是,更好的解決方案是將WorkerAWorkerB都使用的共享邏輯WorkerA到一個新服務中,並將其注入到WorkerAWorkerB中。

請注意,兩個工作人員可能會並行訪問相同的邏輯,因此您需要確保此共享代碼是線程安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM