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 声称耦合更松散。茶比咖啡好吗?我们拭目以待。
我有一个具有以下启动功能的 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 声称耦合更松散。茶比咖啡好吗?我们拭目以待。