2016-09-29 3 views
0

У меня есть приложение, которое всегда не может инициализировать контроллеры только в первый раз. Это происходит только после перезапуска сайта в IIS. После получения 500 обратно из приложения я могу перезагрузить страницу, и после этого все будет хорошо.Ninject Убедитесь, что контроллер имеет конструктор без параметров с Owin и Web Api только после перезапуска сайта.

Не удалось найти аналогичный сценарий через google или SO.

Я использую довольно много NuGet пакетов, они

  • Ninject
  • Ninject.Web.Common
  • Ninject.Web.Common.OwinHost
  • Ninject.Web.Common. WebHost
  • 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

Ok так что проблема оказалась привязок. Я была такая ситуация

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

и в контроллере

MyController(MyDependency dependency){}

Что я не уверен, о том, как он работал на всех после того, как в первый раз, но это было актуальной проблемой.

Спасибо nozzleman указал мне к ней