C# 标识2.2.1&;使用Ninject的用户管理器
我在一个Web API项目中使用了Identity 2.2.1和Ninject,除了UserManager之外,其他一切都运行良好。UserManager是创建的,但是当它被注入到服务中时,它只包含它的默认实现,而不包含它应该使用的配置 我尝试了多种解决方案,但都没有成功。有人能指出我哪里出了问题吗 Startup.csC# 标识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
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为空
谢谢