我的應用程序使用單例模式處理類實例。它負責處理一些事件:如何在單例實例中更新數據庫?
public class MyHandler
{
public void HandlerEvent(object sender, EventArgs e)
{
//want to update DB here
}
}
它可能是MyHandler將需要開始與數據庫交互。我能做到嗎?有我的願景:
- 只是強加
DbContext
作爲單身人士在MyHandler
。顯然這是一個壞主意。 - 使用ASP.Net核心DI特性,併發送至
DbContext
MyHandler
,但作爲一個實例「每個請求一個」。我想在我的情況(MyHandler
是單身),這類似於1 - 不必通過
using
操作,即作爲原子事務,例如爲using(var context = new XDbContext()) {...}
至於我這是一個好方法,但實體框架核心實現的DbContext需要DbContextOptions
作爲它的構造函數的參數。如果我爲XDbContext聲明無參數構造函數,則會引發異常。
任何想法?
你爲什麼不更新在每個請求的實例?例如,在你的MyHandler類中有一個'DbContext'屬性,並且它將得到'XDbContext'實例的更新,你不需要擔心以前的實例,因爲它們將通過GC進行收集。 – Emad
@Emad在我的情況'HandlerEvent'處理從蔚藍的服務總線的消息到達,即它不依賴於HTTP的請求 – Mergasov
我的觀點仍然是有效的,雖然Egorikas的答案確實使用工廠模式是一樣的。你可以在我的DbContext屬性的get方法中創建工廠的完整代碼。 – Emad