注入 asp.net 身份



我正在尝试将ninject与 asp.net 身份一起使用,目前我正在为绑定执行以下操作:

kernel.Bind(typeof(IUserStore<>)).To(typeof(UserStore<>));

这里有类定义:

public interface IUser : IUser<string>
public interface IUserStore<TUser> : IUserStore<TUser, string>, IDisposable where TUser : class, IUser<string>
public class IdentityUser : IdentityUser<string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>, IUser, IUser<string>, IGenerateKeys
public class UserStore<TUser> : UserStore<TUser, IdentityRole, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>, IUserStore<TUser>, IUserStore<TUser, string> where TUser : IdentityUser, new()
public class Context {
    public Context(ILogger Logger, Dictionary<string, string> LocalConfig, IUserStore<IUser> UserManager
         ){...}
}

当我尝试执行kernel.Get<Context>()时,我收到有关无法将 IUserStore 转换为用户存储的错误。

Unable to cast object of type 'UserStore`1[IdentityUser]' to type 'Microsoft.AspNet.Identity.IUserStore`1[Microsoft.AspNet.Identity.IUser]'.

我真的不明白为什么这不起作用,但实际上尝试以下IUserStore<IdentityUser> dummy = new Store<IdentityUser>()不会给出编译错误,但这IUserStore<IUser> dummy = new Store<IdentityUser>()确实如此,但我不明白为什么,因为 IdentityUser 实现了 IUser。

有人有类似的问题吗?

如果你查看Microsoft.AspNet.Identity.EntityFramework,你可以看到UserStore中的TUser必须是IdentityUser的类型而不是IUser,这就是你得到编译错误的原因。

public namespace Microsoft.AspNet.Identity.EntityFramework
{
//
// Summary:
//     EntityFramework based user store implementation that supports IUserStore, IUserLoginStore,
//     IUserClaimStore and IUserRoleStore
//
// Type parameters:
//   TUser:
public class UserStore<TUser> : UserStore<TUser, IdentityRole, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>, IUserStore<TUser>, IUserStore<TUser, string>, IDisposable where TUser : IdentityUser
{
    //
    // Summary:
    //     Default constuctor which uses a new instance of a default EntityyDbContext
    public UserStore();
    //
    // Summary:
    //     Constructor
    //
    // Parameters:
    //   context:
    public UserStore(DbContext context);
   }
}

您应该始终使用 IdentityUser,因为 IUser 只是 IdentityUser 的最小接口。

如果您想将Ninject与Identity一起使用,那将是一个简单的棘手问题,您可以在此处找到分步解决方案: 如何使用Ninject在Identity 2中将用户管理器注入具有默认身份模型的帐户控制器

相关内容

  • 没有找到相关文章

最新更新