メッセージハンドラ内でRebusトランザクションコンテキストを使用しようとしています。 私はhereの文書を読んでおり、hereというサンプルを見たことがありますが、Windsorの仕組みはわかりません。メッセージハンドラ内でrebus TransactionContextを使用します。
誰かがIOCコンテナなしでEFでITransactionContextを使用する例を作って、動作の仕方を理解することができますか?
おかげ
メッセージハンドラ内でRebusトランザクションコンテキストを使用しようとしています。 私はhereの文書を読んでおり、hereというサンプルを見たことがありますが、Windsorの仕組みはわかりません。メッセージハンドラ内でrebus TransactionContextを使用します。
誰かがIOCコンテナなしでEFでITransactionContextを使用する例を作って、動作の仕方を理解することができますか?
おかげ
は、私はそれが仕事のカスタムユニットを実装するためのわずかに高いレベルのAPIを提供しますので、あなたがRebus.UnitOfWorkパッケージを見てお勧めすることができます - またはIoCコンテナなしのいずれか。 MyCustomUnitOfWork
は、あなたが望むものは何でもすることができ
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();
、例えば:あなたがこれを行うことができますRebus.UnitOfWorkで
EFデータベースコンテキストを作成し、SaveChanges
などを呼び出すクラスです。
the wiki page about Unit Of Workで詳しく読むことができます。または、実行コードでthe sample that demonstrates Rebus.UnitOfWorkに直接行くことができます。
非常に明確です。私が今に持っている唯一の問題は、私のEFデータベースのコンテキストがすでに異なって登録されていることです(例えば、提案されたサンプルのようにファクトリメソッドではありません)、特にメッセージハンドラのために別の登録を使う方法はわかりません。なにか提案を? – Lorenzo
私はあなたのプロセスにある "論理アプリケーション"ごとに、常に別のIoCコンテナを使用することを提案します。例えば。 WebアプリケーションとRebusベースのバックエンドをホスティングしている場合は、2つの別々の「論理アプリケーション」があるため、2つのIoCコンテナが必要です。このようにして、両方のシナリオで動作させるために、特定の使用シナリオ(たとえば、WebアプリケーションのWeb要求にバインドされ、Rebusバックエンドのファクトリメソッドを使用)を使用するライフスタイルを使用できます。 – mookid8000
残念ながら私の場合、これは簡単にはできません... – Lorenzo