1
我想在我的消息處理程序中使用Rebus事務上下文。 我已閱讀文檔here並已看到示例here,但我不知道Windsor是如何工作的。在消息處理程序中使用rebus TransactionContext
有人可以舉一個例子,在沒有任何IOC容器的情況下使用ITransactionContext和EF來理解它的工作方式嗎?
感謝
我想在我的消息處理程序中使用Rebus事務上下文。 我已閱讀文檔here並已看到示例here,但我不知道Windsor是如何工作的。在消息處理程序中使用rebus TransactionContext
有人可以舉一個例子,在沒有任何IOC容器的情況下使用ITransactionContext和EF來理解它的工作方式嗎?
感謝
我可以建議你看一看的Rebus.UnitOfWork包,因爲它提供了執行工作的自定義單位稍高級別的API - 無論是使用或不使用IoC容器。
隨着Rebus.UnitOfWork你可以這樣做:
Configure.With(...)
.(...)
.Options(o => {
o.EnableUnitOfWork(Create, Commit, RollBack, Cleanup);
})
.Start();
//....
static MyCustomUnitOfWork Create() => new MyCustomUnitOfWork();
static void Commit(MyCustomUnitOfWork uow) => uow.Commit();
static void RollBack(MyCustomUnitOfWork uow) => uow.RollBack();
static void Cleanup(MyCustomUnitOfWork uow) => uow.Dispose();
其中MyCustomUnitOfWork
然後可以任何你想要的,如一個創建EF數據庫上下文的類,並調用SaveChanges
以及其中的內容。
您可以在the wiki page about Unit Of Work上閱讀更多內容,或者直接轉至the sample that demonstrates Rebus.UnitOfWork並附上運行代碼。
很清楚謝謝你。我現在唯一的問題是我的EF數據庫上下文已經以不同的方式註冊(例如不像建議的樣例那樣使用工廠方法),我不知道如何爲消息處理程序特別使用不同的註冊。任何建議? – Lorenzo
我的建議是始終爲您的流程中的每個「邏輯應用程序」使用單獨的IoC容器。例如。如果您正在託管一個Web應用程序和一個基於Rebus的後端,那麼您將擁有兩個單獨的「邏輯應用程序」,因此您應該有兩個IoC容器。這樣,您就可以使用針對每種特定使用場景的生活方式(例如綁定到Web應用程序中的Web請求,在Rebus後端使用工廠方法),而不是將其彎曲變形以嘗試在兩種場景中都可以使用。 – mookid8000
不幸的是,在我的情況下,這不能輕易完成... – Lorenzo