現在、Unit of Work の単一のインスタンスをコントローラーのサービス レイヤー オブジェクトに挿入しています。
public class OrderController : Controller
{
private IUnitOfWork _unitOfWork;
private IOrderService _recipeService;
private IInventoryService _inventoryService;
public OrderController(IUnitOfWork unitOfWork, IOrderService orderService, IInventoryService inventoryService)
{
_unitOfWork = unitOfWork;
_orderService = orderService;
_inventoryService = inventoryService
//Use property injection to apply the Unit of Work context and validation state to our services
_orderService.Context = _unitOfWork;
_inventoryService.Context = _unitOfWork;
}
理想的には、コントローラーから UoW コンテキストを削除し、登録時に UoW の有効期間を定義して、同じ UoW が HTTP 要求のスコープで使用されるようにしたいと考えています。リクエスト中にインスタンス化される各サービス オブジェクトには、Unity を介して注入された同じインスタンス UoW があります。また、コントローラーで非同期アクションを使用したいのですが、そこに影響があるかどうかはわかりません。
HierarchicalLifetimeManager の説明は私が望んでいるように聞こえますが、これを間違えるとデバッグの悪夢に終わる可能性があるため、110% 確実にしたいと考えています (参照: http://unitymvc3.codeplex.com/ )
次の登録により、望ましい動作が得られますか、それとも別の方法でアプローチする必要がありますか?
container.RegisterType<IOrderService, OrderService>();
container.RegisterType<IInventoryService, InventoryService>();
container.RegisterType<IUnitOfWork, UnitOfWork>(new HierarchicalLifetimeManager());
ありがとう!
クリス