當我將我的上下文綁定爲InRequestScope
時,在DelegatingHandler中的代碼被調用(在Application_Start中實例化並在控制器初始化之前執行)時處理上下文。如果我使用InTransientScope,那麼它可以工作,但我想要1個上下文。基於這個回答here,這是擁有1個上下文的正確方法。InRequestScope爲DelegatingHandlers處理entitycontext
的Global.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?