Я работаю над приложением с MVC5, EF 6 и использую ASP.NET Identity.Я использую инъекцию зависимостей Unity для разрешения моих классов.Моим примером было сообщение в блоге: https://tech.trailmax.info/2014/09/aspnet-identity-and-ioc-container-registration/
После того, как все сделано из статьи, и когда я впервые запускаю код, он дает мне: Тип Microsoft.AspNet.Identity.EntityFramework.UserStore`1 [[AppMVC.Models.ApplicationUser, AppMVC, версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null]] не имеет конструктора, который принимает параметры (ApplicationDbContext). ошибка в этой строке в UnityConfig.RegisterTypes(Контейнер IUnityContainer) статический метод:
public static void RegisterTypes(IUnityContainer container)
{
// NOTE: To load from web.config uncomment the line below.
// Make sure to add a Unity.Configuration to the using statements.
// container.LoadConfiguration();
// TODO: Register your type's mappings here.
// container.RegisterType<IProductRepository, ProductRepository>();
container.RegisterType<ApplicationDbContext>();
container.RegisterType<ApplicationSignInManager>();
container.RegisterType<ApplicationUserManager>();
container.RegisterType<IUnitOfWork, UnitOfWork>();
container.RegisterType<IBaseService<Picture>, PictureService>();
container.RegisterType<IPictureService, PictureService>();
container.RegisterType<IBaseService<UserExt>, UserExtService>();
container.RegisterType<IUserExtService, UserExtService>();
container.RegisterType<IAuthenticationManager>(
new InjectionFactory(c => HttpContext.Current.GetOwinContext().Authentication));
container.RegisterType<AccountController>();
container.RegisterType<ManageController>();
container.RegisterType<UserManager<ApplicationUser>>(new HierarchicalLifetimeManager());
container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new HierarchicalLifetimeManager());
container.RegisterType<DbContext, ApplicationDbContext>(new HierarchicalLifetimeManager());
}
Специально в
container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new InjectionConstructor(typeof(ApplicationDbContext)));
После этого я изменил его на:
container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new HierarchicalLifetimeManager());
И ошибка исчезла.Когда я пытаюсь войти через свое приложение и нажимаю кнопку «Войти», я ввел метод входа в AccountController:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}
Затем, когда я вхожу в систему
var result = await signInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
, я сразу же получаюв
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (userManager != null)
{
userManager.Dispose();
userManager = null;
}
if (signInManager != null)
{
signInManager.Dispose();
signInManager = null;
}
}
base.Dispose(disposing);
}
С ошибкой: ![enter image description here](https://i.stack.imgur.com/xWaY9.png)
Конструктор моего AccountController выглядит следующим образом
[Authorize]
public class AccountController : Controller
{
private ApplicationUserManager userManager;
private ApplicationSignInManager signInManager;
private readonly IAuthenticationManager authenticationManager;
public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager, IAuthenticationManager authenticationManager)
{
this.userManager = userManager;
this.signInManager = signInManager;
this.authenticationManager = authenticationManager;
}
}
Та же ошибка выдается, когда япопробуйте зарегистрировать нового пользователя: ![enter image description here](https://i.stack.imgur.com/M2cmJ.png)
Может кто-нибудь сказать мне, что мне не хватает в моем коде?Заранее спасибо!