在注册为SingleInstance的服务中请求注册为InstancePerRequest的服务

时间:2015-12-03 14:43:35

标签: asp.net-web-api2 autofac

如标题中所述,我正在尝试解决单例方法中的服务,但到目前为止,我无法确定问题所在。

Current thread Thread #6: Message written by Thread #3
Current thread Thread #1: Message written by Thread #1
Current thread Thread #8: Message written by Thread #8
Current thread Thread #5: Message written by Thread #1
Current thread Thread #4: Message written by Thread #4
Current thread Thread #9: Message written by Thread #9
Current thread Thread #7: Message written by Thread #3
Current thread Thread #2: Message written by Thread #3
Current thread Thread #0: Message written by Thread #3
Current thread Thread #3: Message written by Thread #3

问题是GetRequestLifetimeScope总是返回null。有任何想法吗?感谢

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。发生的事情是,只有在执行到达控制器时才会创建Autofac Web请求标记。

protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
    if (securityProvider.ValidateAccess(sessionId, routeTemplate, request.Method.Method, out sessionData))
    {
        request.GetDependencyScope().GetRequestLifetimeScope().<IApiStorageService>()

    }
}

在将请求传递给负责调用Action的任务之前,该代码在Web API处理程序中执行。

        var apiStorageService = request.GetDependencyScope().GetRequestLifetimeScope().Resolve<IApiStorageService>();

        if (securityProvider.ValidateAccess(sessionId, routeTemplate, request.Method.Method, out sessionData, apiStorageService))
        {
        }

作为一种解决方法,我在方法调用之前解析了服务并将其作为参数传递,它看起来非常讨厌,但我找不到更好的方法来实现它。