У меня есть проект MVC 5, который был модифицирован, чтобы использовать INT в качестве первичного ключа идентичности, как показано в этом guide«Нет IUserTokenProvider не зарегистрирован» при использовании инъекции StructureMap зависимостей
я позволил подтверждение по электронной почте, как описано в this guide
Все работало нормально, как ожидалось. Затем я установил structuremap.mvc5 для инъекции зависимостей и добавлен модифицированный DefaultRegistry.cs к
public DefaultRegistry() {
Scan(
scan => {
scan.TheCallingAssembly();
scan.WithDefaultConventions();
scan.AssemblyContainingType(typeof(MyProject.Data.MyDbContext));
scan.With(new ControllerConvention());
});
//For<IExample>().Use<Example>();
For<IUserStore<ApplicationUser, int>>().Use<MyUserStore>().LifecycleIs<HttpContextLifecycle>();
For<IAuthenticationManager>().Use(() => HttpContext.Current.GetOwinContext().Authentication);
}
Проект строит хорошо, но при попытке зарегистрировать новый пользователь на сайте, подтверждение отправки электронной почты в настоящее время бросает исключение System.NotSupportedException : IUserTokenProvider не зарегистрирован при вызове UserManager.GenerateEmailConfirmationTokenAsync (userID).
private async Task<string> SendEmailConfirmationTokenAsync(int userID, string subject)
{
string code = await UserManager.GenerateEmailConfirmationTokenAsync(userID);
var callbackUrl = Url.Action("ConfirmEmail", "Account",
new { userId = userID, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(userID, subject,
"Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");
return callbackUrl;
}
Я новичок в инъекции зависимостей и уверен, что я делаю что-то неправильно. Я буду благодарен за ваши мысли и идеи.
Как вы настроили свой «UserManager»? –
@HamletHakobyan Я использовал определение UserManger по умолчанию, которое получает экземпляр из контекста owin и не выполняет никаких конфигураций. В конце концов я закончил делать что-то похожее на http://stackoverflow.com/questions/26240873/issues-configuring-structuremap-mvc5-to-work-with-identity, но хотел бы знать, есть ли лучший подход, поскольку это больше похоже на взломать. – dipole