永続性を無視したリポジトリパターンを実装しました。IUnitOfWork
リポジトリの実装は、エンティティオブジェクトおよびITable<T>
インターフェイスとのみ対話します。目的は、IUnitOfWork
が再利用されないが、単一のトランザクションを表すことです。これまでのところ、メモリ内とLinq-to-SqlバージョンのIUnitOfWork
およびを実装しましたITable<T>
。
私の問題はIUnitOfWork
、リポジトリへの注入が原因IUnitOfWork
で、リポジトリが使用されている場所で新しいインスタンスを作成する方法を知る必要が生じることです。これはプラグイン可能であるはずの主要な部分なので、私が何か間違ったことをしたように感じます。一般的な使用パターンは次のようなものです。
FooUnitOfWork unitOfWork = new FooUnitOfWork();
Repository repos = new Repository(unitOfWork);
// ...act upon repos
unitOfWork.Save();
これで、アプリ内のすべてのリポジトリ使用量が正しい作業単位(たとえば、メモリ内、L2Sなど)を取得できるようにするために、他のパターンが必要なようです。
これに最も適したパターンは何ですか?私はこのトピックに関するファウラーの議論を見てきましたが、彼の例はどれもぴったりではないようです。私が持っている抽象化の量は私が望む以上のものであるとすでに感じているので、さらに別の間接参照を構築することは過度に思えます。
現時点では、正しいを生成するように構成できる、ある種のアプリ全体のプロバイダーに傾倒していますIUnitOfWork
。私はオフベースですか、それともこれは本当に実装にとらわれないために必要なことですか?