【问题标题】:Ninject / Entity Framework - Error When Handing Requests at the Same TimeNinject / Entity Framework - 同时处理请求时出错
【发布时间】:2014-01-29 20:36:48
【问题描述】:

我使用 MVC5/EF6 创建了一个站点,并使用 Ninject 作为 DI 容器将其绑定在一起。

除了在一个页面上,我同时进行 2 个 ajax 调用之外,一切都运行良好。

控制器/存储库吐出各种错误,例如:

“在 mscorlib.dll 中发生了“System.Data.Entity.Core.EntityException”类型的第一次机会异常。附加信息:底层提供程序在打开时失败。”

对 api 的一次调用将始终有效,第二次则间歇性地工作。如果我直接在控制器中创建数据上下文,一切正常,所以错误必须与 Ninject 有关,但我无法弄清楚我需要做些什么来对其进行排序。将范围更改为 Transient/Thread 只会更改错误。

非常感谢任何帮助。

这是我的(编辑过的)代码:

从 Global.asax Application_Start() 调用

var context = new myDataContext();

// Lowest down wins
IKernel kernel = new StandardKernel();

DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel));

GlobalConfiguration.Configuration.DependencyResolver
    = new App_Start.NinjectResolver(kernel);

kernel.Bind<IRepository<Models.MyClass>>()
    .To<MyRepository>()
    //.InTransientScope()
    //.InThreadScope()
    .InRequestScope()      
    .WithConstructorArgument("context", context);

API 控制器

  public class MyApiController : ApiController
  {
    IRepository<MyRepository> _repository;

    public EMAAFController(IRepository<MyRepository> repository)
    {
     _repository = repository;
    }



    public IEnumerable<Models.MyClass> Get(int id)
    {
      var itemToReturn = _repository.GetAll().Where(i => i.id == id).ToList();

      return itemToReturn;
    }
  }

【问题讨论】:

    标签: c# asp.net-mvc entity-framework ninject asp.net-mvc-5


    【解决方案1】:

    你做错了。绑定在应用程序启动时完成,在您的情况下,您创建上下文实例并将其路径绑定

    将您的绑定更改为

    kernel.Bind<myDataContext>().ToSelf().InRequestScope();
    
    kernel.Bind<IRepository<Models.MyClass>>().To<MyRepository>().InRequestScope()   
    

    所以当 ninject 解析你的存储库时,它会看到带有输入参数 myDataContext 的构造函数,并且会了解如何获取上下文

    【讨论】:

    • 感谢您的回答。看起来它会是正确的,但我仍然对创建数据上下文实例的位置感到困惑。请你能帮我把它拼出来。我尝试了大约 20 分钟的谷歌搜索,但无法发挥作用。
    • 忽略我。我已经解决了。除了您的观点之外,我的构造函数试图接受 DbContext,而不是接口或特定上下文。这阻止了 Ninject 解决绑定问题。在存储库中有一个接受 MyDataContext 的构造函数来修复它。感谢您的帮助
    • 如果任何搜索者发现这篇文章并阅读了我之前的评论,我也发现这很有帮助 - stackoverflow.com/questions/14840515/…
    猜你喜欢
    • 2011-11-18
    • 2017-09-03
    • 2016-09-07
    • 1970-01-01
    • 2017-03-01
    • 2014-04-29
    • 2015-07-06
    • 2020-03-15
    • 2017-06-17
    相关资源
    最近更新 更多