我不想在我的域中引用EntityFramework,因此Identity.EntityFramework
引用IdentityUser
。但是我想使用UserManager
Identity.Core
使用IUserStore<TUser>
TUser : IUser<string>
。因此,我需要隐藏IUserStore
,同时隐藏ApplicationUser
,因为它来自IdentityUser
。
在我的数据访问层中:
public class ApplicationUser : IdentityUser, IApplicationUser { }
// somewhere for IoC container:
var userStore = new UserStore<ApplicationUser>();
// The following breaks with error CS0266:
// Cannot implicitly convert type 'UserStore<ApplicationUser>' to 'IUserStore<IApplicationUser>'
IUserStore<IApplicationUser> userStore = userStore; // does not work
var um = new UserManager<IApplicationUser>(userStore);
在我的域层中:
public interface IApplicationUser : IUser<string> {}
// desired behavior somewhere in domain/web:
var myUserManager = iocContainer.Resolve<UserManager<IApplicationUser>();
此代码不起作用,因为IUserStore<TUser>
中的TUser不是变体(协方差)。
答案 0 :(得分:0)
它要求我编写一个继承自Microsoft.AspNet.Identity.Framework.UserStore
的{{1}}适配器,因此可以与IUserStore
一起使用。它将我的自定义用户对象映射到IdentityUser。它的要点可以在https://gist.github.com/w1ld/b9228f5a27c54b061f90#file-userstoreadapter-cs找到它希望它有所帮助!