OWIN,IoC,Bootstraping Providers和保持生活方式

时间:2014-10-10 18:58:45

标签: inversion-of-control castle-windsor owin asp.net-web-api2 asp.net-identity-2

我无法通过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正常工作。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

这几乎为我解决了这个问题:

Dependency Injection (using SimpleInjector) and OAuthAuthorizationServerProvider

工厂方法路线似乎是最好的方法,因为它在OWIN的管道中有多早。