2010-12-16 9 views
2

Asp.Net MVCアプリケーションのUnitOfWorkでCommit()をどこに呼び出す必要がありますか?それでも私のコントローラユニットはテスト可能なままにしておきます。Asp.Net MVCアプリケーションでUnitOfWork.Commit()を呼び出す場所

私はHttpModuleを使用しますか?ベースコントローラを作成し、OnActionExecutedを使用しますか?またはGlobal.asax:Application_EndRequest()

答えて

4

あなたのコントローラは、次のようになります。

[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つの実装が必要です。

  • EntityFrameworkUnitOfWorkIUnitOfWork
  • InMemoryUnitOfWorkIUnitOfWork

ので、ユニットテスト - ちょうど(InMemoryUnitOfWorkを注入しますそれはcをコミットする静的に束縛するList<T>など)

0

あなたのUIがcommitコールをドメインコントローラに送信し、ドメインコントローラ内の関連するパーティにコールを渡す必要があるようです。

関連する問題