C# Ninject';InRequestScope中的s不';似乎不会返回相同的实例
我们犯了一个错误,在每个存储库中定义了一个新的DbContext。所以在开发过程中,我们遇到了很多这样的错误:C# Ninject';InRequestScope中的s不';似乎不会返回相同的实例,c#,asp.net-mvc-4,ninject,C#,Asp.net Mvc 4,Ninject,我们犯了一个错误,在每个存储库中定义了一个新的DbContext。所以在开发过程中,我们遇到了很多这样的错误: An entity object cannot be referenced by multiple instances of IEntityChangeTracker. 因此,我们认为最好的做法是确保所有存储库在每个请求中使用相同的上下文,而不是在任何地方都进行处理。最初我们有一个NinjectControllerFactory,在那里我们还放置了存储库绑定。我安装了Ninject.
An entity object cannot be referenced by multiple instances of IEntityChangeTracker.
因此,我们认为最好的做法是确保所有存储库在每个请求中使用相同的上下文,而不是在任何地方都进行处理。最初我们有一个NinjectControllerFactory,在那里我们还放置了存储库绑定。我安装了Ninject.Web.Commons nuget包,它在App_Start中创建了NinjectWebCommon.cs文件
我将所有绑定都移动到NinjectWebCommon文件,并使NinjectControllerFactory使用相同的内核。我添加了DbContext类作为绑定,并为其提供了InRequestScope方法
ninjectKernel.Bind<EfDbContext>().ToSelf().InRequestScope();
现在这个项目构建得很好,但是我们仍然会遇到与我在本文开头所描述的相同的错误。我是不是忘了一步?我真的找不出它为什么不工作。检查一下:我们有一个自定义工厂,但它被设置为使用webcommons文件的IKernel,所以这不是问题所在。然而,安装Ninject.MVC3似乎解决了我们的问题。非常感谢。
public class EfPageRepository : IPageRepository
{
EfDbContext context;
public EfPageRepository(EfDbContext dbContext)
{
this.context = dbContext;
}
}