SimpleInjector不起作用--OWIN上的Web API

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SimpleInjector不起作用--OWIN上的Web API相关的知识,希望对你有一定的参考价值。

OwinStartup.cs

public class OwinStartup
{
    internal static IDataProtectionProvider DataProtectionProvider { get; private set; }

    public void Configuration(IAppBuilder app)
    {
        DataProtectionProvider = app.GetDataProtectionProvider();
        var config = new HttpConfiguration();

        SimpleInjectorConfig.Configure(app);
        ConfigureOAuth(app);
        WebApiConfig.Register(config);
        app.UseCors(CorsOptions.AllowAll);
        app.UseWebApi(config);  
    }

    private static void ConfigureOAuth(IAppBuilder app)
    {
        app.CreatePerOwinContext(
            () => (IDisposable)GlobalConfiguration.Configuration.DependencyResolver.GetService(
                typeof(AppUserManager)));

        var options = new OAuthAuthorizationServerOptions
        {
            TokenEndpointPath = new PathString("/Token"),
            Provider = new AppAuthProvider(),
            AllowInsecureHttp = true,
        };

        app.UseOAuthAuthorizationServer(options);
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    }
}

SimpleInjectorConfig.cs

public static class SimpleInjectorConfig
{
    public static void Configure(IAppBuilder app)
    {
        var container = new Container();
        container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();

        //allows scoped instances to be resolved during OWIN request
        app.Use(async (context, next) =>
        {
            using (AsyncScopedLifestyle.BeginScope(container))
            {
                await next();
            }
        });

        container.Register<AppIdentityDbContext>(Lifestyle.Scoped);
        container.Register<AppUserManager>(Lifestyle.Scoped);
        container.Register(
            () =>
                container.IsVerifying
                    ? new OwinContext().Authentication
                    : HttpContext.Current.GetOwinContext().Authentication, Lifestyle.Scoped);
        container.Register<AppSignInManager>(Lifestyle.Scoped);

        container.Verify();

        GlobalConfiguration.Configuration.DependencyResolver =
            new SimpleInjectorWebApiDependencyResolver(container);
    }
}

所以在我的qazxsw poi的实现中称为qazxsw poi我试图使用以下代码获取OAuthAuthorizationServerProvider的实例(我需要找到用户):

AppAuthProvider

但不知道为什么我仍然得到AppUserManager。我真的不知道该怎么做,因为每个事情似乎都配置正确。有任何想法吗 ?谢谢 !

答案

我找到了解决方案。更新的代码如下:

OwinStartup.cs

var manager = context.OwinContext.Get<AppUserManager>();

SimpleInjectorConfig.cs

null

也许有人会用它。

以上是关于SimpleInjector不起作用--OWIN上的Web API的主要内容,如果未能解决你的问题,请参考以下文章

Swagger 在 OWIN Startup Web API C# 中不起作用

ASP.NET MVC5 OWIN Facebook 身份验证突然不起作用

自托管 owin 应用程序中的混合授权(Windows NTLM 和匿名)不起作用 - “此请求的授权已被拒绝”

使用委托包装异常处理时,Web-API 调用不起作用

如何在 Asp.Net Web API 2 中使用 Owin OAuth2 修改令牌端点响应正文

MediatR 和 SimpleInjector 的依赖范围问题