实现通用存储库和工作单元模式

时间:2013-04-10 01:23:43

标签: c# asp.net-mvc-4 ninject unit-of-work

我正在尝试根据此tutorial实现通用存储库和工作单元模式。除了模式之外,我还使用Ninject为我的网络应用程序执行依赖注入。

我使用的具体绑定在这里:

private static void RegisterServices(IKernel kernel)
{
    kernel.Bind(typeof(IGenericRepository<>))
          .To(typeof(GenericRepository<>)).InSingletonScope();
    kernel.Bind<IUnitOfWork>()
          .To<UnitOfWork>();
}

但是根据教程,我需要将DbContext传递给我的UnitOfWork类中的每个存储库属性,以便所有存储库只共享一个DbContext实例,如下所示:

public GenericRepository<Course> CourseRepository
{
    get
    {
        if (this.courseRepository == null)
        {
            this.courseRepository = new GenericRepository<Course>(context);
        }
        return courseRepository;
    }
}

问题是,每当Ninject注入DbContext的实例时,我如何将UnitOfWork实例(驻留在GenericRepository类中)传递给GenericRepository构造函数?我知道WithConstructorArgument方法,但我无法在kernel.Bind次调用中使用它,因为那时我无法访问DbContext个实例。

1 个答案:

答案 0 :(得分:0)

恕我直言你的问题不是依赖注入解决问题,而是创建GenericRepository对象时的实例依赖(你需要一个dbcontext的特定实例,它依赖于解析IGenericRepository的UnityOfWork类)

因此,我建议您使用工厂来创建IGenericRepository实例。

您可以找到更多详细信息here