MVC4アプリケーションとNinject.MVC3でEF4.3を使用しています。コントローラは、-Repositoryスイッチを使用してMVCscaffoldedされます。MVCScaffolderは、データアクセス用のEFを使用してリポジトリクラス(および対応するIRepositoryインターフェイス)を作成します。この場合、DbContext派生オブジェクトは、各スキャフォールドリポジトリのデータメンバーとして常に「更新」されます。
MyContext context = new MyContext();
コントローラのスキャフォールディングの性質は、各コントローラに対して、通常、対応するリポジトリも取得するというものです。
質問:
1)コントローラーを持っているドメインオブジェクトごとにリポジトリを用意するのは理にかなっていますか?
これは、集約ルートのみを公開する必要があるリポジトリパターンと比較すると直感に反しているようです。
2)リポジトリオブジェクトがインスタンス化されるたびにDbContext派生オブジェクトの新しいインスタンスを生成することは意味がありますか、それともアプリの起動時にDbContext派生オブジェクトのシングルトンインスタンスをDIコンテナに登録して解決することは意味がありますか?次のようなシングルトンリポジトリ:
Bind<MyContext>().To<MyContext>().InSingletonScope(); //ninject code on app startup
//resolve context in repositories:
MyContext context = ServiceLocator.Current.GetInstance<MyContext>();
アプリケーションの存続期間中、DbContext派生オブジェクトをシングルトンとして保持することの欠点はありますか?
ありがとう。