[英]Designing Dependecy Injection and reuse of a single data context
我目前剛剛開始實現依賴注入,所以我可以開始測試我的代碼並且多次遇到一個我無法弄清楚的問題。
我目前的情況:
我有一個單獨的類(foo.cs),它在Windows服務運行的整個過程中都是活動的。 它負責輪詢數據庫以獲取新消息,然后將其發送出去並更新數據庫以反映發送的成功。
我的問題是foo.cs具有數據訪問依賴性(Message Repository - linq-to-sql數據上下文),因此它通過構造函數注入,其生命周期范圍與foo相同。 我正在閱讀的所有地方都說數據上下文生命周期應該是一個單獨的工作單元。 因此,我需要注入我想要使用的實際類型,並在每次我想在foo中執行單個工作單元時構造它,而不是傳入已經構建的存儲庫,該存儲庫在整個服務期間保持活動狀態。
一種可能性:不要在構造期間直接為Foo類提供數據上下文,而是為其提供數據上下文“工廠”類/接口,該類實現了在每次調用時創建新數據上下文的方法。
**編輯**
如果我的描述不清楚,這里是我的意思草圖:
interface IDataContextFactory
{
??? CreateContext();
}
class DataContextFactory : IDataContextFactory
{
public ??? CreateContext()
{
// Create and return the LINQ data context here...
}
}
class Foo
{
IDataContextFactory _dataContextFactory;
public Foo(IDataContextFactory dataContextFactory)
{
_dataContextFactory = dataContextFactory;
}
void Poll()
{
using (var context = _dataContextFactory.CreateContext())
{
//...
}
}
}
該參考文獻討論各種替代方 如果您的處理是有效的一系列全有或全無UOW,那么全局上下文實際上可能是正常的。 如果您具有更高的復雜性,那么引用文章中的每個線程或工廠等方法可能更合適。 在后一種情況下,您將注入工廠而不是上下文。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.