Cela se produit après que j'ai personnalisé les services d'identité de base asp.net pour prendre en charge le mode multiclient basé sur This article. Je l'ai simplifié pour répondre à mes besoins.InvalidOperationException: Une dépendance circulaire a été détectée pour le service de type 'Microsoft.AspNetCore.Identity.UserManager
Voici ma configuration de base.
1) application personnalisée utilisateur
public class ApplicationUser : IdentityUser<int>, IEntityBase{}
2) personnalisé Rôle
public class ApplicationRole : IdentityRole<int>, IEntityBase{}
3) personnalisé magasin de rôle
public class RoleStoreMultiTenant<TRole> : RoleStore<TRole, ApplicationDbContext, int>{}
4) personnalisé utilisateur magasin
public class UserStoreMultiTenant<TUser, TRole, TKey> : UserStore<TUser, TRole, ApplicationDbContext, int>{}
5) Mon service de rôle hérite d'en haut (3). Ceci est juste pour séparer mon code du code substitué RoleStore.
public class ApplicationRoleStore : RoleStoreMultiTenant<ApplicationRole>{}
6) Mon service utilisateur héritant de above (4). Ceci est juste pour séparer mon code du code substitué UserStore.
public class ApplicationUserStore : UserStoreMultiTenant<ApplicationUser, ApplicationRole, int>{}
7) Mon ApplicationDbContext est;
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, int>{}
8) Mes configurations de démarrage liées à l'identité (dans ConfigureServices).
services.AddScoped<IRoleStore<ApplicationRole>, ApplicationRoleStore>();
services.AddScoped<IUserStore<ApplicationUser>, ApplicationUserStore>();
services.AddIdentity<ApplicationUser, ApplicationRole>(o =>
{
o.User.RequireUniqueEmail = true;
//options code
}).AddUserStore<ApplicationUserStore>()
.AddEntityFrameworkStores<ApplicationDbContext, int>();
9) Dans la méthode Startup Configure j'ai;
//other code
app.UseIdentity();
//other code
10) J'ai un BaseController attend ci-dessous par l'injection de constructeur
public BaseController(ApplicationDbContext dbContext,
UserManager<ApplicationUser> userManager,
SignInManager<ApplicationUser> signInManager,
IMessageServices messageServices, ILoggerFactory loggerFactory,
AppTenant currentTenant, IMapper mapper)
{
_dbContext = dbContext;
_signInManager = signInManager;
_userManager = userManager;
_messageServices = messageServices;
_logger = loggerFactory.CreateLogger<BaseController>();
_currentTenant = currentTenant;
_mapper = mapper;
}
Tous les autres contrôleurs héritent de cette base.
Mes migrations de base de données fonctionnent correctement et les structures de base de données d'identité sont créées avec mes propriétés personnalisées sans aucun problème. Cependant, lorsque je lance l'application, j'obtiens l'erreur indiquée dans le sujet. Lequel est;
InvalidOperationException: A circular dependency was detected for the service of type 'Microsoft.AspNetCore.Identity.UserManager`1[Registrar.Data.MultitenantIdentity.Models.ApplicationUser]'.
trace de la pile montre tout le code-cadre et je trouve qu'il est difficile de comprendre la référence circulaire .
Quelqu'un peut-il me diriger dans la bonne direction?
cela signifie que 'UserManager' a une dépendance sur un type qui dépend directement de ou dépend de 'UserManager ' .ie: 'A => B, B => C, C => A' –
Nkosi