我无法通过OWINs bootstraping(启动类)来连接IoC容器(Windsor)中定义的Providers(OAuth和RefreshToken),并且尊重Providers的生活方式(PerWebRequest)。我只是提供商的问题,控制器有一个Scoped生活方式正在完美地工作。
我知道这可能永远不会奏效......但基于以下内容:
public void ConfigureOAuth(IAppBuilder app, WindsorContainer container)
{
OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions()
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(30),
Provider = container.Resolve<IOAuthAuthorizationServerProvider>(),
RefreshTokenProvider = container.Resolve<IAuthenticationTokenProvider>()
};
// Token Generation
app.UseOAuthAuthorizationServer(OAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
在启动期间,Provider和RefreshTokenProvider只会设置一次。我需要它们是PerWebRequest,因为底层实现使用的是UserManager,UserStore和DBContext,它与数据库更改不同步,因为它永远不会被处理掉。
不确定答案是否在OwinMiddleware或CreatePerOwinContext()中......我已经试图让IoC与Providers正常工作。任何帮助将不胜感激。
答案 0 :(得分:0)
这几乎为我解决了这个问题:
Dependency Injection (using SimpleInjector) and OAuthAuthorizationServerProvider
工厂方法路线似乎是最好的方法,因为它在OWIN的管道中有多早。