Я использую следующие 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.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.