![](/img/trans.png)
[英]Entity Framework Core ApplicationDbContext DI in instances created from a HostedService
[英]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 用作托管服務相同的實例。
但是,更好的解決方案是將WorkerA
和WorkerB
都使用的共享邏輯從WorkerA
到一個新服務中,並將其注入到WorkerA
和WorkerB
中。
請注意,兩個工作人員可能會並行訪問相同的邏輯,因此您需要確保此共享代碼是線程安全的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.