我阅读了一些关于类似主题的文章。我有一个部分仓库使用Ninject跨资料库共享Singleton dbContext
public class EFPartRepository : IPartRepository
{
private ItemDBEntities dbContext = null;
public EFPartRepository(ItemDBEntities dbContext)
{
this.dbContext = dbContext;
}
}
我会用另一个仓库命名的图像库
public class EFUploadedImageRepository : IUploadedImageRepository
{
private ItemDBEntities dbContext = null;
public EFUploadedImageRepository(ItemDBEntities dbContext)
{
this.dbContext = dbContext;
}
}
因为他们将在同一请求中使用,我希望他们的请求期间共享的DbContext的单,所以不会有任何异常“一个实体对象不能被IEntityChangeTracker的多个实例引用”
这是我原来的Ninject注册码。
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<IPartRepository>().To<EFPartRepository>();
kernel.Bind<IUploadedImageRepository>().To<EFUploadedImageRepository>();
}
所以我的问题是,这里是初始化这个单身的最佳场所,所以它可以通过不同的全球资源库很容易使用?以及如何申报? (最糟糕的情况是在每次调用期间总是传递dbContext作为参数)。
谢谢!
非常感谢!我会试一试。也许我应该有一个dbContext容器,并将其作为一个单例,由所有存储库共享。该容器最初将dbConext设置为null。当请求到达时,控制器构造函数将获得一个存储库,并创建dbContext,以便所有存储库都可以访问它,因为容器是共享的。一旦请求结束,它就会被销毁。 – Chris
@Chris正确。 – zaitsman