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

本文关键字:工作 单元 模式 存储 实现 | 更新日期: 2023-09-27 18:08:26

我正在尝试根据本教程实现通用存储库和工作单元模式。除了模式之外,我还使用Ninject为我的web应用程序做依赖注入。

我使用的特定绑定如下:

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;
    }
}

问题是我如何通过DbContext实例(居住在UnitOfWork类)到GenericRepository构造函数每当GenericRepository的实例被Ninject注入?我知道WithConstructorArgument方法,但我不能在我的kernel.Bind调用中使用它,因为那时我将无法访问DbContext实例。

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

IMHO你的问题不是依赖注入解决问题,而是创建GenericRepository对象时的实例依赖(您需要依赖于UnityOfWork类的dbcontext的特定实例,该UnityOfWork类正在解析GenericRepository)

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

你可以在这里找到更多的细节