2012-04-04 14 views
13

appharborにデプロイされたMVC 3プロジェクトでNinjectを使用しています。私は、アプリケーションが起動したときに例外が発生したことに気付き、Ninject内部の何かが原因であるように見えますが、そこに何かの答えが見つかりません -appharborのアプリケーション起動時にNinjectがクラッシュする

完全な例外を追加しようとしますここに:

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 

私は、ページをリロードした場合 - 例外が消えます。 これは、フィルタにninject使用とは何かを持っているかもしれません:

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"); 
+0

でも、私はこれに戸惑いました。何があなたのNinjectがクラッシュしていると思いますか?フィルターを取り出すと消えますか? – Mrchief

+0

また、このエラーが発生します。私はappharborと新しい遺物がインストールされているWindows 2008サーバーの両方でこれを取得しているので、新しい遺物でもあります。両方ともninject 2.2と3.0です。 – terjetyl

+0

スタックトレース( 'NewRelic.Agent.Core.AgentShim.GetTracer')からは、問題を引き起こしているNewRelicのようです... – nemesv

答えて

13

問題がNinjectによって引き起こされていません。原因は、NewRelic.Agent.Core.AgentShim(AppHarborが使用)です。

stacktraceを見ても、Ninjectの自動エクステンション読み込み機能を無効にして手動でロードすることでこの問題を回避できます。

var kernel = new StandardKernel(new NinjectSettings { LoadExtensions = false }) 
kernel.Load(new Ninject.Web.Mvc.MvcModule()); // same for all other extension modules 
+0

私はこれを試しましたが、私の問題は解決しませんでした。私はまだLoadExtensions = falseで例外を取得します。 –

+0

@JessChadwickこれは、質問のstacktraceのちょうど回避策です。上記と全く同じようにスタックトレースを解決します。別の問題があるか、カーネルの作成後にLoadExtensionをfalseに設定しています(kernel.Settings.LoadExtensions = false)。これは動作しません。別の問題がある場合、おそらくAppHarborが問題を解決するまで待たなければならないでしょう。 –

+0

@RemoGloor、nope - 私はちょうど同じスタックトレースを取得し、上記の例のようにLoadExtensionsプロパティを設定します。私はちょうどAppHarborが修正するのを待たなければならないように見える。 –

1

一時的にNew Relicアドオンを無効にし、AppHarborサーバーからNew Relicエージェントを削除しました。 New Relicは、プラットフォーム上で実行されているアプリケーションでも問題が発生しなくなった時点で、再追加されます。

関連する問題