4

私は 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そもそも私はそれを正しくやっていますか?私は周りを検索しましたが、見つけたように見えるのは、作業単位なしで汎用リポジトリのみを使用するチュートリアルだけです。

4

1 に答える 1