Ninject确保控制器在站点重启后只有Owin和Web Api的无参数构造函数

时间:2016-09-29 04:45:03

标签: c# asp.net-web-api ninject owin

我有一个应用程序,总是第一次无法初始化控制器。它只在IIS中重新启动站点后才会发生。从应用程序获得500后,我可以重新加载页面,之后一切正常。

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

我正在使用相当多的nuget包,它们是

  • Ninject
  • Ninject.Web.Common
  • Ninject.Web.Common.OwinHost
  • Ninject.Web.Common.WebHost
  • Ninject.Web.WebApi
  • Ninject.Web.WebApi.OwinHost

这是进行配置的类

.NegativeInfinity

如果有帮助,这就是堆栈跟踪的样子

ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, spinnerArray); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter);

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

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

    [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;
            }
        }
    }   

我从那以后删除了Ninject.Common.WebHost,这没有改变任何东西。仍有问题。

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

1 个答案:

答案 0 :(得分:0)

好的,问题结果是绑定。我有这种情况

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

并在控制器中

MyController(MyDependency dependency){}

我不确定在第一次之后它是如何工作的,但那是实际问题。

感谢sprayman指点我吧