我正在尝试在.summary, .bio, .http, .terms, .citation {
width:75%;
min-width: 812px;
margin:auto;
margin-top: 1em;
margin-bottom: 3em;
display: flex;
color: #585858;}
.summary {
flex-direction: row;}
.bio, .terms, .citation {
flex-direction: column;}
figure{
display: flex;}
app(ASP.NET Core
库)中实现身份系统,并且有一个让我疯狂的特殊挂断。
首先,我使用EntityFramework 不。我甚至不使用SQL。我正在备份 RavenDB ,所以我需要实现非常具体;这不是问题。
所以我设计了一个RC2
类,它看起来像这样;
RavenUserStore
独立工作。我已经实现了所有的方法,等等。太棒了。非常干净和高效。
现在,我转到我的网络应用程序并连接起来;
public class RavenUserStore<TUser> :
IUserStore<TUser>,
IUserLoginStore<TUser>,
IUserPasswordStore<TUser>,
IUserRoleStore<TUser>,
IUserSecurityStampStore<TUser>,
IUserClaimStore<TUser>,
IUserLockoutStore<TUser>,
IUserTwoFactorStore<TUser>,
IUserEmailStore<TUser> {
// ...
}
所以我按照我见过的所有样本制作一个控制器来使用它,以及来自Identity Framework Github Repository的核心样本
services.AddTransient<ILookupNormalizer>(s => new LowerInvariantLookupNormalizer());
services.AddTransient<IPasswordHasher<Member>>(s => new PasswordHasher<Member>());
services.AddTransient<IUserStore<Member>, RavenUserStore<Member>>();
services.AddIdentity<Member, Role>(o => {
o.Password.RequiredLength = 6;
o.Password.RequireDigit = true;
o.Password.RequireLowercase = false;
o.Password.RequireUppercase = false;
})
.AddUserStore<RavenUserStore<Member>>()
.AddRoleStore<RavenRoleStore<Role>>();
好的,所以我仔细检查了这些课程。
//... [PROPERTIES]...//
public AccountController(UserManager<Member> userManager, SignInManager<Member> signInManager) {
// ... [attach constructor parameters to properties] ...//
}
有一个UserManager<T>
属性,类型为Store
。
理论上......如果依赖注入通过构造函数注入IUserStore<T>
到IUserStore<T>
的类型,那么这不应该意味着RavenUserStore<T>
得到UserManager<T>
1}}作为Store属性?
我以为也会这样;但是当我在RavenUserStore<T>
上调用方法时,不会调用UserManager
上的方法。为什么是这样?我该怎么办?
我是否真的必须制作自定义RavenUserStore
课程并重新执行所有这些方法?
答案 0 :(得分:1)
您需要在调用services.AddIdentity()
之前添加自己的自定义提供程序。在内部,AddIdentity
使用TryAddScoped()
,只有在服务容器中尚不存在默认项目时才添加它们。
因此,只需在注册所有自定义实现后调用AddIdentity()
,就意味着它们将优先于您的预期。