如何隐藏`IdentityUser`时将`UserManager <iapplicationuser>`暴露给我的业务层?

时间:2015-06-24 11:04:17

标签: asp.net-identity

我不想在我的域中引用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不是变体(协方差)。

1 个答案:

答案 0 :(得分:0)

它要求我编写一个继承自Microsoft.AspNet.Identity.Framework.UserStore的{​​{1}}适配器,因此可以与IUserStore一起使用。它将我的自定义用户对象映射到IdentityUser。它的要点可以在https://gist.github.com/w1ld/b9228f5a27c54b061f90#file-userstoreadapter-cs找到它希望它有所帮助!