Ninject和实体框架

时间:2011-05-12 20:04:58

标签: asp.net-mvc-3 entity-framework-4 ninject ninject-2

我正在使用Ninject和MVC应用程序,也使用EF4.1 Code First。我在尝试测试我可以从两个不同的浏览器实例发出请求时遇到问题。

基本上,如果我在大致相同的时间点击两个浏览器上的登录,我会收到一条错误,告诉我“在创建模型时无法使用上下文。”

现在,我的第一个假设是我有冲突的实例,因此没有在上下文中正确设置范围。

我有一个包含必要表的基类上下文,我继承了这个。然后我有一个注入的工厂,负责在我申请我的存储库时实际创建上下文。

public class ContextFactory
{
     TContext Create<TContext>( ) 
}

我需要这样做,因为我的连接字符串是在运行时决定的,所以我不能只使用web.config中包含的连接字符串

public class Repository : BaseRepository<MyObject>
{
   public Repository(IContextFactory factory) : base(factory) 
   {
   }
}

我的想法是,当我需要我的存储库时,我注入了存储库,它有自己的注入,创建它的上下文,我可以提供一些默认实现。

我的下一个问题是我没有正确关闭或破坏某些情况。我使用了别人的例子来在会话范围内设置某些对象数据,但大多数我尝试使用OnRequestScope。

1 个答案:

答案 0 :(得分:4)

听起来ContextFactory需要绑定InRequestScope

Bind<IContextFactory>().To<ContextFactory>().InRequestScope();

您收到的错误似乎表明两个请求 - 每个浏览器实例中的一个 - 正在尝试使用您的EF上下文的同一个确切实例,这当然不起作用。