1

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?

+0

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

Répondre

1

a trouvé le problème. Dans la classe;

public class ApplicationUserStore : UserStoreMultiTenant<ApplicationUser, ApplicationRole, int>{} 

Je lui ai demandé UserManager dans le constructeur qui a été l'origine du problème. Cela aurait été bien si le cadre montre à quelle ligne dans mon code l'a fait échouer.

+0

"Cela aurait été bien si le cadre montre à quelle ligne dans mon code l'a fait échouer." Si vous résolvez un service directement à partir du code, il est presque impossible pour un conteneur DI de vous aider avec ceci; l'anti-modèle de Service Locator empêche le conteneur DI de faire son travail, ce qui est l'une des nombreuses raisons pour lesquelles Service Locator est appelé un anti-pattern. – Steven