C# ASP.NET MVC:没有使用Ninject注册IUserTokenProvider

C# ASP.NET MVC:没有使用Ninject注册IUserTokenProvider,c#,asp.net,asp.net-mvc,ninject,ninject.web.mvc,C#,Asp.net,Asp.net Mvc,Ninject,Ninject.web.mvc,我在调用\u userManager.generateemailconfimationtokenasync(user.Id)时遇到错误没有注册IUserTokenProvider正在生成要在帐户注册电子邮件中发送的令牌。我已经审阅了许多与此相关的帖子,但没有一篇能够解决我的问题。据我所知,此功能通过以下方式连接到ApplicationUserManager类中: if (dataProtectionProvider != null) { IDataProtector dataProtec

我在调用
\u userManager.generateemailconfimationtokenasync(user.Id)时遇到错误
没有注册IUserTokenProvider
正在生成要在帐户注册电子邮件中发送的令牌。我已经审阅了许多与此相关的帖子,但没有一篇能够解决我的问题。据我所知,此功能通过以下方式连接到
ApplicationUserManager
类中:

if (dataProtectionProvider != null)
{
    IDataProtector dataProtector = dataProtectionProvider.Create("ASP.NET Identity");

    this.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtector);
}
但是,绑定似乎不起作用,因为my
ApplicationUserTokenProvider
UserTokenProvider在生成我的令牌时仍然为空。作为参考,您可以在下面找到my
ApplicationUserManager的代码:

public class ApplicationUserManager : UserManager<ApplicationUser>
  {
    public ApplicationUserManager(IUserStore<ApplicationUser> store, IDataProtectionProvider dataProtectionProvider)
        : base(store)
    {
      // Configure validation logic for usernames
      this.UserValidator = new UserValidator<ApplicationUser>(this)
      {
        AllowOnlyAlphanumericUserNames = false,
        RequireUniqueEmail = true
      };

      // Configure validation logic for passwords
      this.PasswordValidator = new PasswordValidator
      {
        RequiredLength = 6,
        RequireNonLetterOrDigit = true,
        RequireDigit = true,
        RequireLowercase = true,
        RequireUppercase = true,
      };

      // Configure user lockout defaults
      this.UserLockoutEnabledByDefault = true;
      this.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);
      this.MaxFailedAccessAttemptsBeforeLockout = 5;

      // Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the user
      // You can write your own provider and plug it in here.
      this.RegisterTwoFactorProvider("Phone Code", new PhoneNumberTokenProvider<ApplicationUser>
      {
        MessageFormat = "Your security code is {0}"
      });
      this.RegisterTwoFactorProvider("Email Code", new EmailTokenProvider<ApplicationUser>
      {
        Subject = "Security Code",
        BodyFormat = "Your security code is {0}"
      });
      this.EmailService = new EmailService();
      this.SmsService = new SmsService();

      if (dataProtectionProvider != null)
      {
        IDataProtector dataProtector = dataProtectionProvider.Create("ASP.NET Identity");

        this.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtector);
      }
    }
  }
公共类应用程序管理员:用户管理员
{
公共应用程序服务器管理器(IUserStore存储,IDataProtectionProvider dataProtectionProvider)
:基地(商店)
{
//为用户名配置验证逻辑
this.UserValidator=新的UserValidator(this)
{
AllowOnlyAlphanumericUserNames=false,
RequireUniqueEmail=true
};
//配置密码的验证逻辑
this.PasswordValidator=新密码验证器
{
所需长度=6,
RequiredOnletterDigit=真,
RequireDigit=true,
RequireLowercase=true,
RequireUppercase=true,
};
//配置用户锁定默认值
this.UserLockoutEnabledByDefault=true;
this.DefaultAccountLockoutTimeSpan=TimeSpan.FromMinutes(5);
this.MaxFailedAccessAttemptsBeforeLockout=5;
//注册双因素身份验证提供商。此应用程序使用电话和电子邮件作为接收验证用户代码的步骤
//您可以编写自己的提供者并将其插入此处。
此.RegisterWofactorProvider(“电话代码”,新的电话号码提供程序)
{
MessageFormat=“您的安全代码为{0}”
});
此.RegisterWofactorProvider(“电子邮件代码”,新的EmailTokenProvider)
{
Subject=“安全代码”,
BodyFormat=“您的安全代码为{0}”
});
this.EmailService=新的EmailService();
this.SmsService=新的SmsService();
if(dataProtectionProvider!=null)
{
IDataProtector dataProtector=dataProtectionProvider.Create(“ASP.NET标识”);
this.UserTokenProvider=新的dataProtector TokenProvider(dataProtector);
}
}
}

非常感谢您的帮助。

清洁并构建解决方案后,问题已得到解决。请注意,在问题发生期间,解决方案已构建多次,但未清理。

是否有帮助?IDataProtectionProvider被注入我的
ApplicationUserManager
中,此IDataProtectionProvider通过构造函数
IDataProtector中的以下两行提供
IUserTokenProvider
dataProtector=dataProtectionProvider.Create(“ASP.NET标识”)
this.UserTokenProvider=newdataprotectortokenprovider(dataProtector)。绑定在Startup.cs中注册为
kernel.Bind().ToMethod(x=>\u app.GetDataProtectionProvider())
@mjwills不幸的是,我已经多次查看了这两篇文章,我试图使用它们的解决方案,但都没有效果
public class ApplicationUserManager : UserManager<ApplicationUser>
  {
    public ApplicationUserManager(IUserStore<ApplicationUser> store, IDataProtectionProvider dataProtectionProvider)
        : base(store)
    {
      // Configure validation logic for usernames
      this.UserValidator = new UserValidator<ApplicationUser>(this)
      {
        AllowOnlyAlphanumericUserNames = false,
        RequireUniqueEmail = true
      };

      // Configure validation logic for passwords
      this.PasswordValidator = new PasswordValidator
      {
        RequiredLength = 6,
        RequireNonLetterOrDigit = true,
        RequireDigit = true,
        RequireLowercase = true,
        RequireUppercase = true,
      };

      // Configure user lockout defaults
      this.UserLockoutEnabledByDefault = true;
      this.DefaultAccountLockoutTimeSpan = TimeSpan.FromMinutes(5);
      this.MaxFailedAccessAttemptsBeforeLockout = 5;

      // Register two factor authentication providers. This application uses Phone and Emails as a step of receiving a code for verifying the user
      // You can write your own provider and plug it in here.
      this.RegisterTwoFactorProvider("Phone Code", new PhoneNumberTokenProvider<ApplicationUser>
      {
        MessageFormat = "Your security code is {0}"
      });
      this.RegisterTwoFactorProvider("Email Code", new EmailTokenProvider<ApplicationUser>
      {
        Subject = "Security Code",
        BodyFormat = "Your security code is {0}"
      });
      this.EmailService = new EmailService();
      this.SmsService = new SmsService();

      if (dataProtectionProvider != null)
      {
        IDataProtector dataProtector = dataProtectionProvider.Create("ASP.NET Identity");

        this.UserTokenProvider = new DataProtectorTokenProvider<ApplicationUser>(dataProtector);
      }
    }
  }