2

我正在尝试根据本教程实现通用存储库和工作单元模式。除了这些模式之外,我还使用 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;
    }
}

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

4

1 回答 1

0

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

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

您可以在此处找到更多详细信息

于 2013-04-10T01:43:55.087 回答