c# – SimpleInjector的WebAPIRequest生命周期是否包含消息处理
我是SimpleInjector的新手,并通过WebAPI使用它的示例.我使用了SimpleInjector.Integration.WebApi.WebHost.QuickStart nu-get包,然后为我的测试注册了一个简单类型,如下所示:
container.RegisterWebApiRequest<SimplePOCO>(); 从ApiController方法内部,我可以请求一个实例.到现在为止还挺好.我想将我的测试扩展到早期的管道,特别是消息处理程序.所以我创建了一个简单的DelegatingHandler,如: protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request,CancellationToken cancellationToken) { Task<HttpResponseMessage> response; var container = SimpleInjectorWebApiInitializer.container; var rc = container.GetInstance<SimplePOCO>(); response = base.SendAsync(request,cancellationToken); response.ContinueWith((responseMsg) => { }); return response; } 使用以下消息调用GetInstance< SimplePOCO>()错误:
难道我做错了什么?消息处理程序是否在WebAPI请求的生命周期之外?考虑到它们的完整性,这看起来很奇怪.如果消息处理程序在生命周期之外,那么包含消息处理程序的生命周期会更长吗? 解决方法
嗯,事实上,他们是.除非您显式触发IDependencyScope的创建,否则将在DefaultHttpControllerActivator.Create方法内创建IDependencyScope(通过调用request.GetDependencyScope()). 要确保代码在依赖范围内运行,您所要做的就是在处理程序中显式调用request.GetDependencyScope(): protected override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request,CancellationToken cancellationToken) { // trigger the creation of the scope. request.GetDependencyScope(); Task<HttpResponseMessage> response; var container = SimpleInjectorWebApiInitializer.container; var rc = container.GetInstance<SimplePOCO>(); response = base.SendAsync(request,cancellationToken); response.ContinueWith((responseMsg) => { }); return response; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |