Asp.net web api 如何将异步作用域的依赖项注入IOAuthorizationServerProvider?

Asp.net web api 如何将异步作用域的依赖项注入IOAuthorizationServerProvider?,asp.net-web-api,oauth,dependency-injection,asp.net-web-api2,simple-injector,Asp.net Web Api,Oauth,Dependency Injection,Asp.net Web Api2,Simple Injector,我已经在WebApi2项目中实现了IOAuthorizationServerProvider。我正在使用SimpleInjector,并已使用AsyncScopedLifecycle注册了服务、存储库等。我将这些依赖项作为工厂注入到我的实现中。但是,OAuth进程似乎没有在异步范围内运行,因为我在尝试进行身份验证时遇到以下错误 AdminUserAuthenticationStrategy已注册为“异步作用域”,但该实例是在活动(异步作用域)作用域的上下文之外请求的 MyIOAuthorizat

我已经在WebApi2项目中实现了
IOAuthorizationServerProvider
。我正在使用SimpleInjector,并已使用
AsyncScopedLifecycle
注册了服务、存储库等。我将这些依赖项作为工厂注入到我的实现中。但是,OAuth进程似乎没有在异步范围内运行,因为我在尝试进行身份验证时遇到以下错误

AdminUserAuthenticationStrategy已注册为“异步作用域”,但该实例是在活动(异步作用域)作用域的上下文之外请求的

My
IOAuthorizationServerProvider
已注册为单例,下面是DI配置的相关部分(请注意,
AsyncScopedLifecycle
是默认设置):

166容器寄存器(()=>{…});
...
226容器。注册表单(()=>{
227函数身份验证策略工厂=()=>新的IAAuthenticationStrategy[]{
228 container.GetInstance()。。。
229        };
230 Func TenantThostDetectionStrategies工厂=()=>新的ITenantDetectionStrategy[]{
231            ...
232        };
...
236返回新的AuthorizationServerProvider(authenticationStrategiesFactory、TenantToStDetectionStrategiesFactory);
237    });
这是注入的构造函数:

公共授权服务器提供程序(
功能验证策略工厂,
功能租户(检测策略工厂){
如果(authenticationStrategiesFactory==null)
抛出新ArgumentNullException(nameof(authenticationStrategiesFactory));
if(TenantThostDetectionStrategiesFactory==null)
抛出新ArgumentNullException(nameof(tenantHostDetectionStrategiesFactory));
_authenticationStrategiesFactory=authenticationStrategiesFactory;
_tenantHostDetectionStrategiesFactory=tenantHostDetectionStrategiesFactory;
}
当我尝试“执行”工厂时,例如
var authenticationStrategies=\u authenticationStrategiesFactory()

SimpleInjector.ActivationException发生HResult=0x80131500
Message=类型的已注册委托 AdminUserAuthenticationStrategy引发了异常。这个 AdminUserAuthenticationStrategy已注册为“异步作用域” 但该实例是在 活动(异步作用域)作用域。Source=SimpleInjector StackTrace:
位于SimpleInjector.InstanceProducer.GetInstance()处 SimpleInjector.Container.GetInstanceService位于 MyProject.Api.Web.Startup.DependencyInjectionConfig.c__DisplayClass7_0.b__9() 在里面 C:\Projects\MyProject\MyProject.Api.Web\Startup\DependencyInjectionConfig.cs:line 227

内部异常1:ActivationException: AdminUserAuthenticationStrategy已注册为“异步作用域” 但该实例是在 活动(异步作用域)作用域

OAuthConfig

公共静态类OAuthConfig{
公共静态无效配置(HttpConfiguration配置、IAppBuilder应用程序){
OAuthAuthorizationServerOptions=新的OAuthAuthorizationServerOptions{
TokenEndpointPath=新路径字符串(“/Auth/Token”),
AccessTokenExpireTimeSpan=TimeSpan.FromDays(7),
Provider=config.DependencyResolver.GetService()
};
app.useAuthAuthorizationServer(选项);
使用OAuthBeareAuthentication(新的OAuthBeareAuthenticationOptions());
}
}

如何使OAuth在适当的范围内运行?

您能为您的问题提供更多的上下文吗?您什么时候会收到这个异常?您能发布该异常及其所有内部异常的完整堆栈跟踪吗。@Steven更新了w/exception details和DI config。我遗漏了部分堆栈跟踪。谁在呼叫
AuthorizationServerProvider
。从传入请求开始,查看调用图上的strack跟踪非常重要。这就是整个stacktrace。ASP.NET正在调用
AuthorizationServerProvider
:-)通过我上面添加的配置,现在…如果这是您看到的所有堆栈跟踪,那么您可能正在调试器中运行,并且在第一次出现异常时中断。通过在浏览器中查看或将其记录到磁盘,让它放大并查看完整的堆栈跟踪。