Неполная выдача сообщения «Коллекция была изменена; операция перечисления может не выполняться» - PullRequest
1 голос
/ 10 февраля 2012

Я использую следующие 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.List 1.Enumerator.MoveNextRare() at System.Collections.Generic.List 1.Enumerator.MoveNext () в System.Linq.Enumerable.WhereSelectListIterator 2.MoveNext() at Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map[T](IEnumerable 1 сериал, действие`1 action) в C: \ Projects \ Ninject \ Maintenance2.2 \ Ninject \ SRC \ Ninject \ Инфраструктура \ Language \ ExtensionsForIEnumerableOfT.cs: линия 22 в Ninject.OnePerRequestModule.DeactivateInstancesForCurrentHttpRequest () в C: \ Projects \ Ninject \ Maintenance2.2 \ Ninject \ SRC \ Ninject \ OnePerRequestModule.cs: линия 63 в Ninject.OnePerRequestModule.b__0 (Объект o, EventArgs д) в 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, Boolean и выполняется синхронно)

Я нашел эту ссылку из 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()); 

или

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.

1 Ответ

0 голосов
/ 10 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...