2011-08-04 17 views
0

依存関係が必要なオブジェクト、つまりリポジトリ、UnitOfWorkがすべて素晴らしい、新しいオブジェクトが依存関係を注入し、 'newed'オブジェクトがUnitOfWorkを制御しているオブジェクトリポジトリには、同じUnitOfWork(PerResolveライフタイムマネージャを使用)を使用して、UnitOfWork依存性も注入される必要があるためです。リポジトリ、UnitOfWorkとUnity

私は問題があるが、このUnitOfWorkとRepositoriesのスコープはクラスレベルにあります。

メソッドレベルでUnitOfWorkのライフタイムを制御したい場合は、どうすればよいですか?私はメソッド注入を使用する必要がありますか?もし私のメソッドが必要な依存関係、すなわちRepositoriesとUnitOfWorkをもう一度取っていたらどうでしょう?

いくつかのガイダンスは高く評価されます。

+0

私が知っている限り、UnityはHttpRequest Scoped Lifetimeを提供していません。だからあなたは自分のライフタイムを管理することもUnityを使用することもできません(他のすべてのコンテナ、Autofac、Ninject、StructureMap、すべてがHttp Request Scoped Lifetimesをサポートしています)。 – Phill

答えて

0

メソッドパラメータとしてDIを使用しないでください。少なくとも直接は使用しないでください。

通常の方法は、IUnitOfWorkFactoryなどを使用することです。コンテナからを取得してください。次に、あなたのメソッドで、ファクトリを呼び出して作業単位オブジェクトを取得します。工場は、その作業を行うために容器に戻ってもよい(またはしなくてもよい)かもしれない。 StackOverflowの上で検索を持つ

+0

このルートを開始し、私がリポジトリを新しくしていない(DIを使いたいと思っていた)リポジトリに作業単位を提供し、単一のコンテナ、例えばcontainer.resolveへの参照を避けようとしていましたか? – David

1

実際には、要求ごと(DbContextとラップ)作業単位を保管してください。メソッドを賢明に使用すると、コストのかかるソリューションになります。たとえば、

私たちは1つの方法でデータベースと4つの異なる接続を使用しており、トランザクションの安全な使用はできません。要求ベースの作業単位ごとのユーザーは、コンテナとしてHttPContextを使用できます。

関連する問題