プロジェクトで Unity.MVC3 を使用しています。
一般的な作業単位を実装UnitOfWork<TContext>
しましたが、リクエストごとに作成したいと考えています。Unity.MVC3 を利用して、次のようにしました。
unityContainer.RegisterType(typeof(IUnitOfWork<>), typeof(UnitOfWork<>), new HierarchicalLifetimeManager());
ベースリポジトリ内で言及されたUOWを使用しています。ベース リポジトリは一部の特定のリポジトリで使用され、それらの特定のリポジトリは一部のサービスで使用されます。
UserRepository と UserService があるとします。
UserRepository コンストラクターは多かれ少なかれ次のようになります。
public UserRepository(IUnitOfWork<UserContext> unitOfWork)
: base(unitOfWork)
{
}
UserService 内で UserRepository を使用していますが、UserRepository が使用するのと同じ UOW インスタンスが必要です。
public UserService(IUserRepository userRepository, IUnitOfWork<UserContext> unitOfWork)
{
}
Unity.MVC3 を使用し、HierarchicalLifetimeManager を使用して UOW を登録している間、UserRepository と UserService の両方で同じ UOW インスタンスを取得する必要があります。
問題は、初めて Web サイトを実行すると、2 つの異なる UOW インスタンスが作成され、この 2 つのインスタンスのうちの 1 つのみに対して Dispose メソッドが呼び出されることです。ページがロードされ、更新ボタンを押すと、すべてが正しいように見えます - 1 つのインスタンスのみが作成されます。
登録されたジェネリック型で問題が発生するようです。
問題を再現したい場合は、Unity.MVC3.Exampleコードをダウンロードし、IExampleContext をジェネリックにして実行してみてください。
問題の原因と、これを解決する方法について何か考えがありますか? 前もって感謝します。