我目前在IIS下运行的Web.Api应用程序正在使用Owin转换为自托管应用程序。
我需要从属性中访问依赖项解析程序,以便我可以访问服务的实例。 (该应用程序使用Unity进行DI)。
由于我无法找到将此服务注入属性的方法(如果有,我很乐意听到它),我目前从HttpRequestMessage
获取解析器HttpContext.Current
: -
HttpRequestMessage request = HttpContext.Current.Items["MS_HttpRequestMessage"] as HttpRequestMessage;
var service = request.GetDependencyScope().GetService(typeof(IService)) as IService;
这适用于在IIS下运行的应用,但在Owin下HttpContext
不存在。
我遇到了我在应用启动中配置的OwinRequestScopeContext: -
public void Configuration(IAppBuilder appBuilder)
{
appBuilder.UseRequestScopeContext();
\\...
并在DelegatingHandler
protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
OwinRequestScopeContext.Current.Items["HttpRequestMessage"] = request;
\\...
但是当我在属性中访问OwinRequestScopeContext
时,OwinRequestScopeContext.Current.Items
为空。
我似乎遇到与here相同的问题,但提供的答案似乎并未解决我的问题。
任何人都可以告诉我我在OwinRequestScopeContext
做错了什么和/或从我的属性中获取对依赖项解析器或HttpRequestMessage的最简单方法是什么?