C# 标识2.2.1&;使用Ninject的用户管理器

C# 标识2.2.1&;使用Ninject的用户管理器,c#,asp.net-web-api,ninject,asp.net-identity-2,C#,Asp.net Web Api,Ninject,Asp.net Identity 2,我在一个Web API项目中使用了Identity 2.2.1和Ninject,除了UserManager之外,其他一切都运行良好。UserManager是创建的,但是当它被注入到服务中时,它只包含它的默认实现,而不包含它应该使用的配置 我尝试了多种解决方案,但都没有成功。有人能指出我哪里出了问题吗 Startup.cs public class Startup { internal static IDataProtectionProvider DataProtectionProvide

我在一个Web API项目中使用了Identity 2.2.1和Ninject,除了UserManager之外,其他一切都运行良好。UserManager是创建的,但是当它被注入到服务中时,它只包含它的默认实现,而不包含它应该使用的配置

我尝试了多种解决方案,但都没有成功。有人能指出我哪里出了问题吗

Startup.cs

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

    public void Configuration(IAppBuilder app)
    {
        var config = new HttpConfiguration();
        var kernel = NinjectConfig.CreateKernel();

        app.UseNinjectMiddleware(() => kernel);
        WebApiConfig.Register(config);
        ConfigureOAuth(app, kernel);
        app.UseNinjectWebApi(config);
        app.UseWebApi(config);
    }

    private void ConfigureOAuth(IAppBuilder app, IKernel kernel)
    {
        DataProtectionProvider = app.GetDataProtectionProvider();

        app.CreatePerOwinContext<UserManager>((option, context) =>
        {
            return kernel.Get<UserManager>();
        });

        app.UseCors(CorsOptions.AllowAll);

        app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
        {
            TokenEndpointPath = new PathString("/token"),
            Provider = new AuthorizationServerProvider(),
            AccessTokenExpireTimeSpan = TimeSpan.FromHours(6),
            AllowInsecureHttp = true    // TODO: Change when in production
        });

        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    }
}
public static class NinjectConfig
{
    public static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Load(Assembly.GetExecutingAssembly());

        RegisterServices(kernel);

        return kernel;
    }

    private static void RegisterServices(IKernel kernel)
    {
        GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel);
    }
}
public class IdentityModule : NinjectModule
{
    public override void Load()
    {
        Bind<IUserStore<User>>().To<UserStore<User>>().WithConstructorArgument("context", new NeedsCollectorDbContext());
        Bind<UserManager>().ToSelf();
    }
}
public class UserManager : UserManager<User>
{
    public UserManager(IUserStore<User> store) : base(store)
    {
        UserValidator = new UserValidator<User>(this)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };

        PasswordValidator = new PasswordValidator
        {
            RequiredLength = 6,
            RequireNonLetterOrDigit = false,
            RequireDigit = true,
            RequireLowercase = true,
            RequireUppercase = true,
        };

        var dataProtectionProvider = Startup.DataProtectionProvider;
        if (dataProtectionProvider != null)
        {
            UserTokenProvider = new DataProtectorTokenProvider<User>(dataProtectionProvider.Create("ASP.NET Identity"));
        }
    }
}
IdentityModule.cs

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

    public void Configuration(IAppBuilder app)
    {
        var config = new HttpConfiguration();
        var kernel = NinjectConfig.CreateKernel();

        app.UseNinjectMiddleware(() => kernel);
        WebApiConfig.Register(config);
        ConfigureOAuth(app, kernel);
        app.UseNinjectWebApi(config);
        app.UseWebApi(config);
    }

    private void ConfigureOAuth(IAppBuilder app, IKernel kernel)
    {
        DataProtectionProvider = app.GetDataProtectionProvider();

        app.CreatePerOwinContext<UserManager>((option, context) =>
        {
            return kernel.Get<UserManager>();
        });

        app.UseCors(CorsOptions.AllowAll);

        app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
        {
            TokenEndpointPath = new PathString("/token"),
            Provider = new AuthorizationServerProvider(),
            AccessTokenExpireTimeSpan = TimeSpan.FromHours(6),
            AllowInsecureHttp = true    // TODO: Change when in production
        });

        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    }
}
public static class NinjectConfig
{
    public static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Load(Assembly.GetExecutingAssembly());

        RegisterServices(kernel);

        return kernel;
    }

    private static void RegisterServices(IKernel kernel)
    {
        GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel);
    }
}
public class IdentityModule : NinjectModule
{
    public override void Load()
    {
        Bind<IUserStore<User>>().To<UserStore<User>>().WithConstructorArgument("context", new NeedsCollectorDbContext());
        Bind<UserManager>().ToSelf();
    }
}
public class UserManager : UserManager<User>
{
    public UserManager(IUserStore<User> store) : base(store)
    {
        UserValidator = new UserValidator<User>(this)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };

        PasswordValidator = new PasswordValidator
        {
            RequiredLength = 6,
            RequireNonLetterOrDigit = false,
            RequireDigit = true,
            RequireLowercase = true,
            RequireUppercase = true,
        };

        var dataProtectionProvider = Startup.DataProtectionProvider;
        if (dataProtectionProvider != null)
        {
            UserTokenProvider = new DataProtectorTokenProvider<User>(dataProtectionProvider.Create("ASP.NET Identity"));
        }
    }
}
公共类标识模块:ninject模块
{
公共覆盖无效负载()
{
Bind().To().WithConstructorArgument(“context”,新需求CollectorDBContext());
Bind().ToSelf();
}
}
UserManager.cs

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

    public void Configuration(IAppBuilder app)
    {
        var config = new HttpConfiguration();
        var kernel = NinjectConfig.CreateKernel();

        app.UseNinjectMiddleware(() => kernel);
        WebApiConfig.Register(config);
        ConfigureOAuth(app, kernel);
        app.UseNinjectWebApi(config);
        app.UseWebApi(config);
    }

    private void ConfigureOAuth(IAppBuilder app, IKernel kernel)
    {
        DataProtectionProvider = app.GetDataProtectionProvider();

        app.CreatePerOwinContext<UserManager>((option, context) =>
        {
            return kernel.Get<UserManager>();
        });

        app.UseCors(CorsOptions.AllowAll);

        app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
        {
            TokenEndpointPath = new PathString("/token"),
            Provider = new AuthorizationServerProvider(),
            AccessTokenExpireTimeSpan = TimeSpan.FromHours(6),
            AllowInsecureHttp = true    // TODO: Change when in production
        });

        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    }
}
public static class NinjectConfig
{
    public static IKernel CreateKernel()
    {
        var kernel = new StandardKernel();
        kernel.Load(Assembly.GetExecutingAssembly());

        RegisterServices(kernel);

        return kernel;
    }

    private static void RegisterServices(IKernel kernel)
    {
        GlobalConfiguration.Configuration.DependencyResolver = new NinjectDependencyResolver(kernel);
    }
}
public class IdentityModule : NinjectModule
{
    public override void Load()
    {
        Bind<IUserStore<User>>().To<UserStore<User>>().WithConstructorArgument("context", new NeedsCollectorDbContext());
        Bind<UserManager>().ToSelf();
    }
}
public class UserManager : UserManager<User>
{
    public UserManager(IUserStore<User> store) : base(store)
    {
        UserValidator = new UserValidator<User>(this)
        {
            AllowOnlyAlphanumericUserNames = false,
            RequireUniqueEmail = true
        };

        PasswordValidator = new PasswordValidator
        {
            RequiredLength = 6,
            RequireNonLetterOrDigit = false,
            RequireDigit = true,
            RequireLowercase = true,
            RequireUppercase = true,
        };

        var dataProtectionProvider = Startup.DataProtectionProvider;
        if (dataProtectionProvider != null)
        {
            UserTokenProvider = new DataProtectorTokenProvider<User>(dataProtectionProvider.Create("ASP.NET Identity"));
        }
    }
}
公共类UserManager:UserManager
{
公共用户管理器(IUserStore存储):基本(存储)
{
UserValidator=新的UserValidator(此)
{
AllowOnlyAlphanumericUserNames=false,
RequireUniqueEmail=true
};
PasswordValidator=新的PasswordValidator
{
所需长度=6,
RequiredOnletterDigit=false,
RequireDigit=true,
RequireLowercase=true,
RequireUppercase=true,
};
var dataProtectionProvider=Startup.dataProtectionProvider;
if(dataProtectionProvider!=null)
{
UserTokenProvider=新的DataProtectorTokenProvider(dataProtectionProvider.Create(“ASP.NET标识”);
}
}
}
UserManager在Startup.cs中使用正确的配置进行实例化,但当稍后注入服务时,它将丢失,请参见屏幕截图-注入时UserTokenProvider为空

谢谢