Ninject stürzt beim Anwendungsstart in Appharbor ab

Ich verwende Ninject in meinem MVC 3-Projekt, das in Appharbor bereitgestellt wird. Ich habe festgestellt, dass beim Starten der Anwendung eine Ausnahme auftritt und es so aussieht, als ob Ninject die Ursache dafür ist, aber ich kann dort keine Antworten finden - bitte helfen Sie mir :)

Hier wird versucht, die vollständige Ausnahme hinzuzufügen:

<code>Server Error in '/' Application.

Object reference not set to an instance of an object.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace: 


[NullReferenceException: Object reference not set to an instance of an object.]
   NewRelic.Agent.Core.AgentShim.GetTracer(String tracerFactoryName, UInt32 level, String metricName, String assemblyName, String className, String methodName, String argumentSignature, Object invocationTarget) +51
   System.AppDomain.CreateDomain(String friendlyName, Evidence securityInfo, AppDomainSetup info) +99
   Ninject.Modules.AssemblyNameRetriever.CreateTemporaryAppDomain() in c:\Projects\Ninject\ninject\src\Ninject\Modules\AssemblyNameRetriever.cs:68
   Ninject.Modules.AssemblyNameRetriever.GetAssemblyNames(IEnumerable`1 filenames, Predicate`1 filter) in c:\Projects\Ninject\ninject\src\Ninject\Modules\AssemblyNameRetriever.cs:47
   Ninject.Modules.CompiledModuleLoaderPlugin.LoadModules(IEnumerable`1 filenames) in c:\Projects\Ninject\ninject\src\Ninject\Modules\CompiledModuleLoaderPlugin.cs:81
   Ninject.Modules.ModuleLoader.LoadModules(IEnumerable`1 patterns) in c:\Projects\Ninject\ninject\src\Ninject\Modules\ModuleLoader.cs:60
   Ninject.KernelBase.Load(IEnumerable`1 filePatterns) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:236
   Ninject.KernelBase..ctor(IComponentContainer components, INinjectSettings settings, INinjectModule[] modules) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:97
   Ninject.KernelBase..ctor(INinjectModule[] modules) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:57
   Ninject.StandardKernel..ctor(INinjectModule[] modules) in c:\Projects\Ninject\ninject\src\Ninject\StandardKernel.cs:46
   Checkin.App_Start.NinjectWebCommon.CreateKernel() in d:\temp\44uvjuob.32m\input\Checkin\App_Start\NinjectWebCommon.cs:43
   Ninject.Web.Common.Bootstrapper.Initialize(Func`1 createKernelCallback) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\Bootstrapper.cs:50
   Checkin.App_Start.NinjectWebCommon.Start() in d:\temp\44uvjuob.32m\input\Checkin\App_Start\NinjectWebCommon.cs:26

[TargetInvocationException: Exception has been thrown by the target of an invocation.]
   System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner) +0
   System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner) +69
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) +242
   System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +21
   System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) +19
   WebActivator.BaseActivationMethodAttribute.InvokeMethod() +223
   WebActivator.ActivationManager.RunActivationMethods() +493
   WebActivator.ActivationManager.RunPreStartMethods() +28
   WebActivator.ActivationManager.Run() +55

[InvalidOperationException: The pre-application start initialization method Run on type WebActivator.ActivationManager threw an exception with the following error message: Exception has been thrown by the target of an invocation..]
   System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods) +377
   System.Web.Compilation.BuildManager.CallPreStartInitMethods() +267
   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +690

[HttpException (0x80004005): The pre-application start initialization method Run on type WebActivator.ActivationManager threw an exception with the following error message: Exception has been thrown by the target of an invocation..]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +532
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +90
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +172

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272
</code>

Wenn ich die Seite neu lade, verschwindet die Ausnahme. Dies hat möglicherweise etwas mit der Verwendung von ninject für einen Filter zu tun:

<code>this.BindFilter<AdminAuthorizationAttribute>(FilterScope.Controller, -100)
    .When((context, ad) => context.RouteData.DataTokens["area"] != null &&
            ((string)context.RouteData.DataTokens["area"]).ToLower() == "admin" && 
            ((string)context.RouteData.Values["controller"]).ToLower() != "login");
</code>
 friism10. Apr. 2012, 18:23
Wir arbeiten immer noch mit New Relic, das Problem wurde identifiziert und wir arbeiten an einer Lösung.
 Jess Chadwick10. Apr. 2012, 15:39
@Friism, irgendwelche Updates? Dadurch sieht unsere Website wirklich schlecht aus.
 terjetyl04. Apr. 2012, 19:13
Auch diesen Fehler bekommen. Könnte auch ein neues Relikt sein, da ich dies sowohl auf Appharbor als auch auf einem Windows 2008-Server mit neu installiertem Relikt erhalte. Beide mit ninject 2.2 und 3.0.
 friism04. Apr. 2012, 22:46
Wir sind uns dieses Problems bewusst und arbeiten mit New Relic zusammen, um eine Lösung zu finden.
 nemesv04. Apr. 2012, 20:53
Aus dem Stack-Trace (NewRelic.Agent.Core.AgentShim.GetTracer) NewRelic scheint das Problem zu verursachen ...
 Mrchief04. Apr. 2012, 16:55
Sogar ich war verblüfft. Warum denkst du, dass sein Ninject abstürzt? Verschwindet es, wenn Sie den Filter herausnehmen?
 Søren Pedersen05. Apr. 2012, 10:28
Hört sich gut an Friaul. Gibt es eine Möglichkeit für mich, eine Benachrichtigung zu erhalten oder irgendwo zu lesen, wenn dies behoben ist?
 Neil Thompson17. Apr. 2012, 11:19
Für die Aufzeichnung habe ich dieses Problem auch. Das Update unter @Remo scheint bisher zu funktionieren - aber möglicherweise wurde der Pool nicht neu gestartet, daher bin ich mir nicht sicher. Wenn ein Fix vorhanden ist, wo wird er veröffentlicht?

Antworten auf die Frage(2)

Lösung für das Problem

ic.Agent.Core.AgentShim (von AppHarbor verwendet).

Obwohl Sie sich die Stapelverfolgung ansehen, können Sie dieses Problem möglicherweise umgehen, indem Sie die automatische Erweiterungsladefunktion von Ninject deaktivieren und sie manuell laden.

<code>var kernel = new StandardKernel(new NinjectSettings { LoadExtensions = false })
kernel.Load(new Ninject.Web.Mvc.MvcModule()); // same for all other extension modules
</code>
 Jess Chadwick09. Apr. 2012, 21:42
Ich hatte es versucht, aber es hat mein Problem nicht gelöst. Ich bekomme immer noch die Ausnahme, auch mit LoadExtensions = false
 Jess Chadwick10. Apr. 2012, 15:38
@ RemoGloor, nein - ich habe genau den gleichen Stack-Trace und setze die LoadExtensions-Eigenschaft wie in Ihrem obigen Beispiel. Sieht so aus, als müsste ich nur warten, bis AppHarbor repariert ist.
 Remo Gloor09. Apr. 2012, 23:57
@ JessChadwick Dies ist nur eine Problemumgehung für genau das Stacktrace in der Frage. Dieser Stacktrace wird gelöst, wenn genau wie oben beschrieben vorgegangen wird. Entweder haben Sie ein anderes Problem oder Sie setzen LoadExtension auf false, nachdem der Kernel erstellt wurde (kernel.Settings.LoadExtensions = false). Das wird nicht funktionieren. Wenn Sie ein anderes Problem haben, müssen Sie wahrscheinlich warten, bis AppHarbor das Problem behoben hat.

Wir haben das New Relic-Add-On vorübergehend deaktiviert und den New Relic-Agenten von den AppHarbor-Servern entfernt. Wir werden New Relic erneut hinzufügen, sobald die auf der Plattform ausgeführten Anwendungen keine Probleme mehr verursachen.

Ihre Antwort auf die Frage