Comment ajouter l'authentification MVC 5 à Unity IoC?
Je travaille actuellement sur la mise en œuvre du nouveau ASP.NET MVC 5 authentification prête à l'emploi dans mon application. Cependant, lorsque vous utilisez Unity comme IoC, Je ne peux utiliser aucune partie du AccountController car on me donne l'erreur:
Le type IUserStore`1 n'a pas de constructeur accessible.
C'est ma configuration d'unité donnée qui est appelée dans le global.asax
public class DependencyConfig
{
public static void Initialise()
{
var container = BuildUnityContainer();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
// register all your components with the container here
// it is NOT necessary to register your controllers
container.RegisterType<IEmployeeRepository, EmployeeRepository>();
container.RegisterType<ITeamRepository, TeamRepository>();
container.RegisterType<ICompanyRepository, CompanyRepository>();
return container;
}
}
Et voici les constructeurs par défaut d'un AccountController.cs
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new BusinessTrackerUsersContext())))
{
}
public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
}
public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
}
Et voici les éléments appelés dans les constructeurs AccountController. Ce sont les valeurs par défaut avec de nouveaux noms.
public class BusinessTrackerUsersContext : IdentityDbContext<ApplicationUser>
{
public BusinessTrackerUsersContext()
: base("DefaultConnection")
{
}
}
public class ApplicationUser : IdentityUser
{
}
Toute aide serait largement appréciée!
2 réponses
Parce que vous avez deux constructeurs sur votre contrôleur, unity sélectionnera celui avec une liste de paramètres plus longue, la dernière. Il nécessite L'UserManager à injecter.
Bien que vous ne l'ayez pas listé ici, je soupçonne qu'il a un seul constructeur qui nécessite le IUserStore. Unity a essayé de le résoudre et ne peut trouver aucun constructeur qu'il pourrait utiliser directement ou résoudre ses paramètres.
Je suis D'accord avec Wiktor.
Vous pouvez enregistrer le constructeur sans paramètre avec Unity et l'arrêter en prenant le paramètre plus long en faisant ceci:
container.RegisterType<AccountController>(new InjectionConstructor());