当我将上下文绑定为InRequestScope
时,在调用 DelegatingHandler 中的代码时释放上下文(在 Application_Start 中实例化并在控制器初始化之前执行)。如果我使用 InTransientScope,那么它可以工作,但我想要所有内容都有 1 个上下文。基于此答案here,这是拥有1个上下文的正确方法。
全球.asax
static void Configure(HttpConfiguration config)
{
var kernel = NinjectWebCommon.Bootstrapper.Kernel;
config.MessageHandlers.Add(new ApiKeyHandler(kernel.Get<IApiService>()));
}
绑定
//if i remove InRequestScope here, everything works.
kernel.Bind<EntityDatabaseContext>().ToMethod(context => new EntityDatabaseContext()).InRequestScope();
kernel.Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
//repositories
kernel.Bind<IRepository<Application>>().To<Repository<Application>>().InRequestScope();
//services
kernel.Bind<IApiService>().To<ApiService>().InRequestScope();
所以每当SendAsync
在 ApiKeyHandler 中被调用时,上下文就已经被释放了。但是当调用控制器时(在调用 ApiKeyHandler 之后),上下文就可以了。我不太确定发生了什么。如果它不能与 InRequestScope 一起使用,我该如何像链接问题中的答案那样完成它?1 上下文 InTransientScope 和 InRequestScope 中的所有其他内容?