【问题标题】:Ninject throwing "Collection was modified; enumeration operation may not execute" errorNinject 抛出“集合已修改;枚举操作可能无法执行”错误
【发布时间】:2014-07-07 20:20:20
【问题描述】:

我在我的 Web 项目中使用以下 2 个 Ninject 程序集。

Ninject.dll – Version 2.2.0.0
Ninject.Web.dll – Version 2.2.0.4

我注意到,当我在服务器上执行负载测试时,我收到指向 Ninject 的异常

消息:集合已修改;枚举操作可能不 执行。堆栈跟踪:在 System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource 资源)在 System.Collections.Generic.List1.Enumerator.MoveNextRare() at System.Collections.Generic.List1.Enumerator.MoveNext() 在 System.Linq.Enumerable.WhereSelectListIterator2.MoveNext() at Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map[T](IEnumerable1 系列,Action`1 动作)在 c:\Projects\Ninject\Maintenance2.2\ninject\src\Ninject\Infrastructure\Language\ExtensionsForIEnumerableOfT.cs:line 22 在 Ninject.OnePerRequestModule.DeactivateInstancesForCurrentHttpRequest() 在 c:\Projects\Ninject\Maintenance2.2\ninject\src\Ninject\OnePerRequestModule.cs:line 63 在 Ninject.OnePerRequestModule.b__0(对象 o,EventArgs e) 在 c:\Projects\Ninject\Maintenance2.2\ninject\src\Ninject\OnePerRequestModule.cs:line 36 在 System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步骤, Boolean & completedSynchronously)

我确实从 2011 年 5 月 11 日的 Remo Gloor 中找到了这个链接,它说有一个新的 2.4 版本,其中提到该问题将在 2.4 版本中得到修复。我不确定这个版本是否已经发布/可用,因为我找不到它。 Ninject Runtime Exception occuring frequently - System.InvalidOperationException: Collection was modified; enumeration operation may not execute

有人知道解决此 Ninject 错误的解决方案吗?或者知道我在哪里可以找到 2.4 版本?


这是我使用 Ninject 2.2.0.0 版完成映射的方式

Bind<IMyEntities>().To<MyEntities>().InRequestScope().WithConstructorArgument("connectionString", ConfigurationManager.ConnectionStrings["MyEntities"].ConnectionString);  

使用 3.0 我将其更改为使用

Bind<IMyEntities>().ToConstructor(x => new MyEntities()); 

Bind<IMyEntities>().ToConstructor(x => new MyEntities(ConfigurationManager.ConnectionStrings["MyEntities"].ConnectionString)); 

Bind<IMyEntities>().ToConstructor(x => new MyEntities(new EntityConnection (ConfigurationManager.ConnectionStrings["MyEntities"].ConnectionString)));  

在尝试了上述所有 3 种不同的方法后,我仍然收到错误消息。每次以某种方式调用第三个构造函数时。
我不确定还能尝试什么。我已经投入了大量时间尝试不同的事情,但仍然没有得出结论/解决方案。 如果我无法以某种方式找到/解决这个问题,我将不得不一起删除所有 Ninjet 引用并寻找其他一些 DI。

【问题讨论】:

    标签: collections ninject enumeration was


    【解决方案1】:

    由于一些小的接口不兼容,2.4 已变为 3.0。见http://www.nuget.org/packages/Ninject/3.0.0-rc3

    【讨论】:

    • 感谢您的信息。 Ninject 3.0.0-rc3 是预发布候选版本吗?如果有,你知道什么时候发布吗?
    • 是的,但现在它将与几天后即将发布的版本 100% 二进制兼容。
    • 好的,谢谢。在我更新我的 Web 项目以使用 3.0 版本后,我收到一个错误“找不到类型或命名空间名称‘NinjectHttpApplication’”。你能帮我找到 3.0 版的文档以及 2.2.0.0 和 3.0 之间的变化吗?
    • 我能够解决上一个错误,但现在我得到了这个:Ninject.Syntax.IBindingWhenInNamedWithOrOnSyntax 不包含“InRequestScope”的定义,并且没有扩展方法“InRequestScope”接受第一个参数输入
    • 使用 Ninject.Web.Common 添加;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2015-06-17
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多