OWIN Ninject 中间件在应用程序池重启后不可用

OWIN Ninject middleware unavailable after app pool restart

我有一个具有以下启动功能的 OWIN 应用程序:

    public virtual void Configuration(IAppBuilder app) {
        var config = new HttpConfiguration();            
        config.Filters.Add(new UserNotifyExceptionFilter());
        ConfigureAuth(app);
        app.UseNinjectMiddleware(CreateKernel);
        app.UseNinjectWebApi(config);
        WebApiConfig.Register(config);
        ConfigureLogging(app);
        config.EnableCors();
        ConfigErrorHandling(config);
        HelpPages(app, config);
    }

它似乎可以正确加载 ninject,并且该应用程序在 IIS 8 下可以正常运行数小时或数天。然后,神秘地,它停止工作,并且所有 [Inject]ed 依赖项在所有控制器上都变为空.在启动 class.

中初始加载后,我的代码中没有任何内容会干扰 ninject 的配置

我被这个难住了,似乎没有其他人在 SO 上问过它。

我回顾了我的旧问题,认为我应该 post 我最终找到的答案。对于初学者,Ninject 中间件 has been broken for some time。我们最终将其交换为以下

config.Services.Replace(typeof(IHttpControllerActivator), new ServiceActivator(config, diKernel));

ServiceActivator定义为:

    public class ServiceActivator : IHttpControllerActivator
    {
        private IKernel kernel;

        public ServiceActivator(HttpConfiguration configuration, IKernel kernel)
        {
            this.kernel = kernel;
        }

        public IHttpController Create(
            HttpRequestMessage request,
            HttpControllerDescriptor controllerDescriptor,
            Type controllerType)
        {
            var controller = kernel.Get(controllerType) as IHttpController;
            return controller;
        }
    }

旁注:在较长的 运行 中,我们现在已切换到 AutoFac。 Ninject 让你编码更快,但 AutoFac 声称耦合更松散。茶比咖啡好吗?我们拭目以待。