Изменена коллекция метания Ninject; операция перечисления может не выполнить ошибку

Я использую следующие 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:строка 22 в Ninject.OnePerRequestModule.DeactivateInstancesForCurrentHttpRequest() в c:\Projects\Ninject\Maintenance2.2\ninject\src\Ninject\OnePerRequestModule.cs: строка 63 в Ninject.OnePerRequestModule.b__0(Object o, EventArgs e) в c:\Projects\Ninject\Maintenance2.2\ninject\src\Ninject\OnePerRequestModule.cs: строка 36 в System.Web.HttpApplication.SyncEventExecutionStep.System. Web.HttpApplication.IExecutionStep.Execute() в System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логическое значение и завершено синхронно)

Я нашел эту ссылку от Remo Gloor от 11 мая 2011 года, в которой говорится, что есть новая версия 2.4, в которой упоминается, что проблема будет исправлена ​​в версии 2.4. Я не уверен, что эта версия выпущена/доступна, так как я не могу ее найти. Исключение Ninject Runtime Exception возникает часто - System.InvalidOperationException: коллекция была изменена; операция перечисления может не выполняться

Кто-нибудь знает решение этой проблемы с Ninject или знает, где я могу найти версию 2.4?


Вот как я сделал сопоставление, используя версию 2.2.0.0 Ninject.

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

Используя 3.0, я изменил его на использование

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

or

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

or

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

Попробовав все вышеупомянутые 3 разных способа, я все еще получаю сообщение об ошибке. Каждый раз, когда каким-то образом вызывается третий конструктор.
Я не знаю, что еще попробовать. Я потратил очень много времени, пробуя разные вещи и до сих пор не придя к заключению/разрешению. Если я не смогу каким-то образом найти/решить эту проблему, мне придется удалить все ссылки на Ninjet вместе и перейти к другим DI.


person user1202347    schedule 10.02.2012    source источник


Ответы (1)


2.4 стал 3.0 из-за некоторых незначительных несовместимостей интерфейса. См. http://www.nuget.org/packages/Ninject/3.0.0-rc3

person Remo Gloor    schedule 10.02.2012
comment
Спасибо за информацию. Является ли Ninject 3.0.0-rc3 предварительным релизом. Если да, то знаете, когда он будет выпущен? - person user1202347; 11.02.2012
comment
Это так, но на данный момент он будет на 100% совместим в бинарном виде с предстоящим выпуском через несколько дней. - person Remo Gloor; 11.02.2012
comment
Хорошо спасибо. После того, как я обновил свой веб-проект для использования версии 3.0, я получил сообщение об ошибке. Не удалось найти имя типа или пространства имен «NinjectHttpApplication». Не могли бы вы помочь мне найти документацию для версии 3.0 и узнать, что изменилось между 2.2.0.0 и 3.0. - person user1202347; 13.02.2012
comment
Мне удалось устранить предыдущую ошибку, но теперь я получаю следующую: Ninject.Syntax.IBindingWhenInNamedWithOrOnSyntax не содержит определения для «InRequestScope» и метода расширения «InRequestScope», принимающего первый аргумент типа ‹''› - person user1202347; 13.02.2012
comment
добавить с помощью Ninject.Web.Common; - person Remo Gloor; 14.02.2012
comment
ok изменил это, но теперь появляется новая ошибка, говорящая [ArgumentException: Предоставленное соединение недопустимо, поскольку оно содержит недостаточную информацию о сопоставлении или метаданных. - person user1202347; 14.02.2012
comment
planetgeek.ch/2011 /12/30/ =› Entity Framework - person Remo Gloor; 14.02.2012
comment
я не думаю, что это проблема. Мой веб-сайт нормально работал с версией Ninect 2.2.0.0. Это происходит только после обновления моей версии Ninject до предварительной версии 3.0. - person user1202347; 15.02.2012
comment
Вы хоть читали запись в блоге? Речь идет о (ломающих) изменениях Ninject. Совершенно уверен, что это ваша проблема. - person Remo Gloor; 15.02.2012
comment
Да, я пробовал это с моим entiried, который упоминается в сообщении в блоге this.Bind‹MyEntities›().ToConstructor(x =› new MyEntities()); Даже после этого я продолжал получать сообщение об ошибке [ArgumentException: Предоставленное соединение недопустимо, поскольку оно содержит недостаточную информацию о сопоставлении или метаданных. По какой-то причине конструктор по умолчанию не срабатывает, вместо этого каждый раз вызывается конструктор с EntityConnection, а параметр соединения не инициализируется правильно, что затем выдает ошибку. - person user1202347; 15.02.2012
comment
Это означает, что для создания ваших сущностей используется другая привязка. измените эту привязку, чтобы принудительно использовать конструктор без параметров с данным подходом. - person Remo Gloor; 15.02.2012
comment
@user1202347 user1202347 Можете ли вы рассказать нам, как вы исправили ошибку Не удалось найти имя типа или пространства имен «OnePerRequestModule»? - person Jean-François Beauchamp; 12.06.2012