Asp.Net MVCアプリケーションのUnitOfWorkでCommit()
をどこに呼び出す必要がありますか?それでも私のコントローラユニットはテスト可能なままにしておきます。Asp.Net MVCアプリケーションでUnitOfWork.Commit()を呼び出す場所
私はHttpModuleを使用しますか?ベースコントローラを作成し、OnActionExecuted
を使用しますか?またはGlobal.asax:Application_EndRequest()
?
Asp.Net MVCアプリケーションのUnitOfWorkでCommit()
をどこに呼び出す必要がありますか?それでも私のコントローラユニットはテスト可能なままにしておきます。Asp.Net MVCアプリケーションでUnitOfWork.Commit()を呼び出す場所
私はHttpModuleを使用しますか?ベースコントローラを作成し、OnActionExecuted
を使用しますか?またはGlobal.asax:Application_EndRequest()
?
あなたのコントローラは、次のようになります。
[HttpPost]
public ActionResult SubmitOrder(Order o)
{
try
{
repository.Add(o);
unitOfWork.Commit();
}
catch (YourCustomExceptionClass exc)
{
ModelState.AddError(exc.ToString());
}
return View();
}
たUnitOfWorkはとしてコントローラレベルで宣言する必要があります。
IUnitOfWork unitOfWork;
とコントローラのCTORに注入 - が好ましいとDIリクエストごとのDI。
ウェブアプリケーションのコンテキストでの作業単位は、通常HTTPリクエストです。
HTTPリクエストは、作業を実行するための1つのアクションメソッドのみに向けられます。もちろん、後でHttpGetアクションにリダイレクトするPRGパターンがありますが、HTTPリクエストごとに1つだけのアクションコールが必要です。
したがって、アクションメソッドレベルでUoWをコミットすることは理にかなっています。
あなたはIUnitOfWorkの2つの実装が必要です。
ので、ユニットテスト - ちょうど(InMemoryUnitOfWorkを注入しますそれはcをコミットする静的に束縛するList<T>
など)
あなたのUIがcommit
コールをドメインコントローラに送信し、ドメインコントローラ内の関連するパーティにコールを渡す必要があるようです。