0

MVC 3 Web サイトで Ninject DI を使用していますが、時々以下の例外が発生します。

System.InvalidOperationException: An error occurred when trying to create a controller of type 'SampleMVCApp.Controllers.OrderController'. Make sure that the controller has a parameterless public constructor. ---> System.NullReferenceException: Object reference not set to an instance of an object.
       at SampleMVCApp.Controllers.CRUDController`3..ctor()
       at SampleMVCApp.Controllers.OrderController..ctor()
       at DynamicInjector4625402b6de6431a8914a00f1cecee0d(Object[] )
       at Ninject.Activation.Context.Resolve()
       at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
       at System.Linq.Enumerable.SingleOrDefault[TSource](IEnumerable`1 source)
       at Ninject.ResolutionExtensions.TryGet[T](IEnumerable`1 iterator)
       at SampleMVCApp.MvcApplication.NinjectDependencyResolver.GetService(Type serviceType)
       at System.Web.Mvc.DefaultControllerFactory.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType)
       --- End of inner exception stack trace ---
       at System.Web.Mvc.DefaultControllerFactory.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType)
       at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
       at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
       at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<BeginProcessRequest>b__2()
       at System.Web.Mvc.SecurityUtil.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a()
       at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust[TResult](Func`1 func)
       at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
       at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

ELMAH を使用してすべての例外をキャッチしているため、これは単なる内部エラーであり、リクエストの最終結果には影響しない可能性がありますが、それでも修正したいと考えています。テストまたは開発中にサイトでこのエラーを確認したことはありません。ELMAH のログにのみ表示されます。

私が見る限り、Ninject が CRUDController から継承された OrderController というコントローラーをインスタンス化しようとすると、エラーが発生します。

これは、新しいバージョンをデプロイしてサイトを再コンパイルした後に発生すると推測されます。これは、ほとんどの場合、問題がなく、サイトが正常に機能するためです。

これは Ninject の既知の問題なのか、それとも私のコードに問題があるのか​​疑問に思っています。ありがとう。

4

1 に答える 1

1

スタック トレースは、CRUDControllerある種の例外をスローするのは であることを示しています。MVC によってキャッチされ、まったく別の例外が再スローされます。残念ながら、内部例外のタイプはログに記録されないため、探す必要がある例外の種類を判断するのが難しくなります。

于 2012-05-04T12:00:07.473 に答える