我有一个带有以下启动的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上问过这个问题。
答案 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声称更松散的耦合。茶比咖啡好吗?我们将看到。