我正在尝试根据此tutorial实现通用存储库和工作单元模式。除了这些模式之外,我还使用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
实例。 最佳答案
恕我直言,您的问题不是依赖性注入解决问题,而是创建GenericRepository对象时的实例依赖性(您需要dbcontext的特定实例,该实例依赖于正在解析IGenericRepository的UnityOfWork类)
因此,我建议您使用工厂来创建IGenericRepository实例。
您可以找到更多详细信息here