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