私は MVC3 が初めてで、asp.net Web サイトの素晴らしいチュートリアルに従っています。ただし、Ninject で Unit of Work および Generic Repository パターンを使用する方法については、頭を悩ませることはできません。このチュートリアルを出発点として使用しました: http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns -in-asp-net-mvc-アプリケーション
インターフェイスを使用しなくても、次のように実装できることがわかっています。
汎用リポジトリ:
public class GenericRepository<TEntity> : IGenericRepository<TEntity>
where TEntity : class
{
internal MyContext context;
internal DbSet<TEntity> dbSet;
public GenericRepository(MyContext context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
}
作業単位:
private MyContext context = new MyContext();
private GenericRepository<Student> studentRepository;
private GenericRepository<Course> courseRepository;
public GenericRepository<Student> StudentRepository
{
if (this.studentRepository == null)
{
this.studentRepository = new GenericRepository<Student>(context);
}
return studentRepository;
}
public GenericRepository<Course> CourseRepository
{
if (this.courseRepository == null)
{
this.courseRepository = new GenericRepository<Course>(context);
}
return courseRepository;
}
この設定により、同じコンテキストをすべてのリポジトリに渡し、単一の Save() 関数を呼び出して変更をコミットできます。
インターフェイスIGenericRepository<TEntity>
と具体的な実装GenericRepository<TEntity>
を使用して、Ninject を使用してそれらをバインドできることはわかっています。
kernel.Bind(typeof(IGenericRepository<>)).To(typeof(GenericRepository<>));
しかし、すべてのリポジトリが 1 つのデータベース コンテキストを共有するように設定するIUnitOfWork
にはどうすればよいでしょうか。UnitOfWork
そもそも私はそれを正しくやっていますか?私は周りを検索しましたが、見つけたように見えるのは、作業単位なしで汎用リポジトリのみを使用するチュートリアルだけです。