Структурная карта зависимостей Идентификация ASP.NET MVC 5
Я использую новую структуру ASP.NET MVC 5 Identity для аутентификации. Я традиционно использовал StructureMap для инъекций зависимостей, но у меня возникают проблемы с подключением его к работе с новым AccountController.
Конструкторы AccountController выглядят следующим образом:
public AccountController()
: this(new UserManager<OmpUser>(new UserStore<OmpUser>(new OmpDbContext())))
{
}
public AccountController(UserManager<OmpUser> userManager)
{
UserManager = userManager;
}
Конфигурация My StructureMap выглядит следующим образом:
public static class IoC {
public static IContainer Initialize() {
ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
//x.Register<IUserStore<OmpUser>>(() =>
// new UserStore<OmpUser>(new OmpDbContext()));
x.For<OMPEntities>().HttpContextScoped();
});
return ObjectFactory.Container;
}
}
Когда я запускаю проект, я получаю следующую ошибку:
Ошибка активации при попытке получить экземпляр типа AccountController, ключ ""
Любые идеи о том, как создать объект UserManager для построения инъекций? Я пробовал искать, но не могу найти там много указаний.
Ответы
Ответ 1
Добавьте следующий код в метод инициализации контейнера.
x.For<Microsoft.AspNet.Identity.IUserStore<ApplicationUser>>()
.Use<Microsoft.AspNet.Identity.EntityFramework.UserStore<ApplicationUser>>();
x.For<System.Data.Entity.DbContext>().Use(() => new ApplicationDbContext());
Ответ 2
Добавление атрибута [DefaultConstructor] будет работать.
public class AccountController : Controller
{
private ApplicationSignInManager _signInManager;
private ApplicationUserManager _userManager;
[DefaultConstructor] //This is the attribute you need to add on the constructor
public AccountController()
{
}
// Other implementations here..........
}
Ответ 3
@vikram, это сработало для меня.
cfg.For<IRoleStore<IdentityRole,string>>().Use<RoleStore<IdentityRole>>();