2016-09-29 24 views
0

我有一个应用程序总是无法初次初始化控制器。它只发生在IIS中重新启动站点之后。从应用程序获得500回来后,我可以重新加载页面,然后一切正常。Ninject确保控制器只有在重新启动站点后才具有Owin和Web Api的无参数构造函数

无法通过google或SO找到类似的情况。

我使用了不少的NuGet包,他们是

  • Ninject
  • Ninject.Web.Common
  • Ninject.Web.Common.OwinHost
  • Ninject.Web.Common。虚拟主机提供商
  • Ninject.Web.WebApi
  • Ninject.Web.WebApi.OwinHost

这是做配置

[assembly: OwinStartup(typeof(MyNameSpace.MyClass))] 

    namespace MyNameSpace 
    { 
     internal class MyClass 
     { 
      public void Configuration(IAppBuilder app) 
      { 
       app.UseCors(CorsOptions.AllowAll); 

       var config = new HttpConfiguration(); 
       config.MapHttpAttributeRoutes(); 

       var kernel = CreateKernel(); 
       app.UseNinjectMiddleware(() => kernel); 
       app.UseNinjectWebApi(config); 

       config.EnsureInitialized(); 
      } 

      private IKernel CreateKernel() 
      { 
       var kernel = new StandardKernel(); 
       kernel.Settings.InjectNonPublic = true; 
       kernel.Bind<IMyDependency>().To<MyDependency>().InSingletonScope(); 
       // bindings 
       return kernel; 
      } 
     } 
    } 

这里的类的堆栈跟踪的样子,是否可以帮助

System.InvalidOperationException: An error occurred when trying to create a controller of type 'MyController'. Make sure that the controller has a parameterless public constructor. ---> System.ArgumentException: Type 'MyController' does not have a default constructor 
      at System.Linq.Expressions.Expression.New(Type type) 
      at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.GetInstanceOrActivator(HttpRequestMessage request, Type controllerType, Func`1& activator) 
      at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) 
      --- End of inner exception stack trace --- 
      at System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType) 
      at System.Web.Http.Controllers.HttpControllerDescriptor.CreateController(HttpRequestMessage request) 
      at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext() 

什么会导致应用程序失败的第一次,但随后的工作?任何帮助将不胜感激

编辑:控制器代码看起来像

public class MyController : ApiController 
    { 
     private readonly MyDependency _dependency; 

     internal PathDeviationReportingController(MyDependency dependency) 
     { 
      _dependency = dependency; 
     } 

     /// <summary> 
     /// Do Something 
     /// </summary> 
     /// <response code="200"></response> 
     [HttpGet] 
     [Route("route/dosomething")] 
     [SwaggerResponse(200)] 
     public IHttpActionResult DoSomething() 
     { 
      return Ok(); 
     } 
    } 

我,因为除去Ninject.Common.WebHost,这并没有改变任何东西。仍然有问题。

编辑,以更新绑定代码实际上看起来像*

+0

你能发布'PathDeviationReportingController'的代码吗? – nozzleman

+0

已添加控制器代码,找到可能导致问题的任何内容? –

回答

0

好,所以问题原来是绑定。我有这种情况

Bind<IMyDependency>().To<MyDependency>();

,并在控制器

MyController(MyDependency dependency){}

什么我不知道的是它是如何工作在所有后的第一时间,但是这是实际的问题。

感谢喷嘴指着我朝它

相关问题