Hi Remo,
Thanks for you answer. The issue is NOT related to the NuGet version.
As I mentioned, I first found this issue in an application running
Ninject/Ninject.Web.Mvc 3 at version 2.1.x.x. I've updated
https://github.com/aloker/ninject-issue to use the current 2.2
release. The issue also exists in this version. I've added some
logging output below, maybe it helps (format is SEVERITY timestamp
[threadid] logger message). Note how three requests are made almost at
the same time, that's why I guess it is a race condition.
... (about 350 successful accesses at about 370 requests per second)
INFO 2011-03-01 09:19:18.0305 [43] NinjectIssue.MvcApplication BEGIN
http://localhost:80/
INFO 2011-03-01 09:19:18.0305 [42] NinjectIssue.MvcApplication BEGIN
http://localhost:80/
INFO 2011-03-01 09:19:18.0305 [27] NinjectIssue.MvcApplication BEGIN
http://localhost:80/
ERROR 2011-03-01 09:19:18.0305 [42] NinjectIssue.MvcApplication
ERROR
http://localhost:80/ System.InvalidOperationException:
Collection was modified after the enumerator was instantiated.
at
System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource
resource)
at System.Collections.Generic.Stack`1.Enumerator.MoveNext()
at System.Collections.Generic.Stack`1..ctor(IEnumerable`1
collection)
at Ninject.Activation.Request..ctor(IContext parentContext, Type
service, ITarget target, Func`1 scopeCallback)
at Ninject.Activation.Request.CreateChild(Type service, IContext
parentContext, ITarget target)
at Ninject.Planning.Targets.Target`1.GetValue(Type service,
IContext parent)
at Ninject.Planning.Targets.Target`1.ResolveWithin(IContext parent)
at Ninject.Activation.Providers.StandardProvider.GetValue(IContext
context, ITarget target)
at
Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass2.<Create>b__1(ITarget
target)
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at Ninject.Activation.Providers.StandardProvider.Create(IContext
context)
at Ninject.Activation.Context.Resolve()
at Ninject.KernelBase.<Resolve>b__7(IContext context)
at
System.Linq.Enumerable.<>c__DisplayClass12`3.<CombineSelectors>b__11(TSource
x)
at
System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.<CastIterator>d__b1`1.MoveNext()
at System.Linq.Enumerable.<ConcatIterator>d__71`1.MoveNext()
at System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.<ReverseIterator>d__a0`1.MoveNext()
at
System.Web.Mvc.FilterProviderCollection.<RemoveDuplicates>d__b.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.<ReverseIterator>d__a0`1.MoveNext()
at
System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1
collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at System.Web.Mvc.FilterInfo..ctor(IEnumerable`1 filters)
at
System.Web.Mvc.ControllerActionInvoker.GetFilters(ControllerContext
controllerContext, ActionDescriptor actionDescriptor)
at
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext
controllerContext, String actionName)
at System.Web.Mvc.Controller.ExecuteCore()
at System.Web.Mvc.ControllerBase.Execute(RequestContext
requestContext)
at
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext
requestContext)
at
System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5()
at
System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
at
System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult
_)
at
System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at
System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d()
at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action
f)
at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action
action)
at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult
asyncResult)
at
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult
result)
at
System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step,
Boolean& completedSynchronously)
...
From now on, every request fails like this:
ERROR 2011-03-01 09:19:18.0305 [27] NinjectIssue.MvcApplication
ERROR
http://localhost:80/ Ninject.ActivationException: Error
activating IFilterProvider using binding from IFilterProvider to
NinjectFilterAttributeFilterProvider
A cyclical dependency was detected between the constructors of two
services.
Activation path:
1) Request for IFilterProvider
Suggestions:
1) Ensure that you have not declared a dependency for
IFilterProvider on any implementations of the service.
2) Consider combining the services into a single one to remove the
cycle.
3) Use property injection instead of constructor injection, and
implement IInitializable
if you need initialization logic to be run after property values
have been injected.
at Ninject.Activation.Context.Resolve()
at Ninject.KernelBase.<Resolve>b__7(IContext context)
at
System.Linq.Enumerable.<>c__DisplayClass12`3.<CombineSelectors>b__11(TSource
x)
at
System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.<CastIterator>d__b1`1.MoveNext()
at System.Linq.Enumerable.<ConcatIterator>d__71`1.MoveNext()
at System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.<ReverseIterator>d__a0`1.MoveNext()
at
System.Web.Mvc.FilterProviderCollection.<RemoveDuplicates>d__b.MoveNext()
at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
at System.Linq.Enumerable.<ReverseIterator>d__a0`1.MoveNext()
at
System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1
collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at System.Web.Mvc.FilterInfo..ctor(IEnumerable`1 filters)
at
System.Web.Mvc.ControllerActionInvoker.GetFilters(ControllerContext
controllerContext, ActionDescriptor actionDescriptor)
at
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext
controllerContext, String actionName)
at System.Web.Mvc.Controller.ExecuteCore()
at System.Web.Mvc.ControllerBase.Execute(RequestContext
requestContext)
at
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext
requestContext)
at
System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5()
at
System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
at
System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult
_)
at
System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
at
System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d()
at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action
f)
at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action
action)
at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult
asyncResult)
at
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult
result)
at
System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step,
Boolean& completedSynchronously)
INFO 2011-03-01 09:19:18.0445 [27] NinjectIssue.MvcApplication END
http://localhost:80/
Regards,
Andre
> > System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegat e>b__0()
> > bei
> > System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchron ous>b__7(IAsyncResult