#asp.net-mvc #dependency-injection #simple-injector
#asp.net-mvc #внедрение зависимостей #простой инжектор
Вопрос:
Я использую простой инжектор в своей ошибке приложения MVC и получаю следующую ошибку:
Конструктор типа ApplicationUserManager содержит параметр с именем ‘store’ и типом IUserStore, который не зарегистрирован. Пожалуйста, убедитесь, что IUserStore зарегистрирован, или измените конструктор ApplicationUserManager.
Он хочет, чтобы я зарегистрировал UserStore
, я думаю, мне нужно зарегистрировать его в UserManager
, но я не уверен, что делать.
Я думал, что это должно было выглядеть так:
private static void InitializeContainer(Container container)
{
container.Register<IAuthorisationManager, AuthorisationManager>();
container.Register<IAuthorisationRepository, AuthorisationRepository>();
container.Register<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>();
}
Конфигурация идентификатора:
public class ApplicationUserManager : UserManager<ApplicationUser>
{
public ApplicationUserManager(IUserStore<ApplicationUser> store) : base(store) { }
}
Но затем я получаю сообщение об ошибке:
Чтобы контейнер мог его создавать
UserStore<ApplicationUser>
, у него должен быть только один общедоступный конструктор: у него 2. См https://simpleinjector.org/one-constructor для получения дополнительной информации.
Но это по умолчанию ASP.NET код, чтобы я не мог / не хотел его менять.
Кто-нибудь может объяснить эту ошибку и сказать мне, как ее исправить, пожалуйста?
Ответ №1:
container.Register<IUserStore<ApplicationUser>>(() => new UserStore<ApplicationUser>());
Необходимо зарегистрировать хранилище пользователей, но оно имеет несколько конструкторов, поэтому вам нужно добавить приведенную выше строку
Комментарии:
1. Хотя это возможное решение, это скорее обходной путь. Пожалуйста, ознакомьтесь с этой темой для полной настройки Identity с помощью simple injector: simpleinjector.codeplex.com/discussions/564822 . Это также дает несколько советов по различным рефакторингам в дерьмовом шаблоне.