应用程序池重新启动后,OWIN Ninject中间件无法使用

时间:2017-02-08 19:46:53

标签: c# ninject owin iis-8

我有一个带有以下启动的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依赖项在所有控制器上都变为null。在启动类初始加载后,我的代码中的任何内容都没有使用ninject的配置。

我对这个问题感到难过,似乎没有人在SO上问过这个问题。

1 个答案:

答案 0 :(得分:0)

我回顾过我的旧问题,并认为我应该发布我最终找到的答案。首先,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声称更松散的耦合。茶比咖啡好吗?我们将看到。