Ninject убедитесь, что контроллер имеет конструктор без параметров с Owin и Web Api только после перезапуска сайта

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

Не удалось найти похожий сценарий через google или около того.

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

  • Ninject
  • Ninject.Сеть.Обычный
  • Ninject.Сеть.Обычный.OwinHost
  • Ninject.Сеть.Обычный.WebHost
  • Ninject.Сеть.WebApi
  • Ninject.Сеть.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()

Что может привести к сбою приложения в первый раз, но работать впоследствии? Любая помощь была бы очень признательна

edit: код контроллера выглядит как

    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.Обычный.WebHost и это ничего не изменило. все еще есть проблема.

отредактировано, чтобы обновить, как на самом деле выглядел код привязки*

1 ответ

  1. Итак, проблема оказалась в привязках. У меня была такая ситуация

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

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

    MyController(MyDependency dependency){}

    То, что я не уверен о том, как это работало на всех после первого раза, но это было фактической проблемой.

    Спасибо nozzleman для указывать меня к ему