Lorsque j'exécute mon application en mode débogage, ma méthode d'amorçage échoue à cause d'un service "manquant". Le message d'erreur est:
Aucun service pour le type «Microsoft.AspNetCore.Identity.RoleManager» 1 [Microsoft.AspNetCore.Identity.IdentityRole] »n'a été enregistré.
Quelqu'un peut-il m'aider à enregistrer correctement ce service dans la classe StartUp.cs
? Merci!
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity<IdentityUser>() .AddEntityFrameworkStores<ApplicationDbContext>(); services.AddHttpClient(); services.AddHttpClient<IExceptionServiceClient, ExceptionServiceClient>(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); }
public static class RolesConfig { public static async Task InitialiseAsync(ApplicationDbContext context, IServiceProvider serviceProvider) { var roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>(); string[] roleNames = {"Admin", "Report", "Search"}; foreach (var roleName in roleNames) { var roleExist = await roleManager.RoleExistsAsync(roleName); if (!roleExist) await roleManager.CreateAsync(new IdentityRole(roleName)); } } }
3 Réponses :
Vous devrez probablement ajouter
services.AddIdentity<IdentityUser, IdentityRole>(config => { config.Password.RequireNonAlphanumeric = false; //optional config.SignIn.RequireConfirmedEmail = true; //optional }) .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders();
dans votre méthode ConfigureServices
dans Startup.cs
cela marche! Merci beaucoup. Pour toute autre personne utilisant cette réponse, n'oubliez pas de supprimer services.AddDefaultIdentity<>
Dans votre méthode ConfigureServices
, vous appelez déjà AddDefaultIdentity
qui est un nouvel ajout dans la version 2.1 qui structure Identity sans prise en charge des rôles. Pour ajouter la prise en charge des rôles et donc le RoleManager
à votre collection de services, modifiez votre code comme ci-dessous:
services.AddDefaultIdentity<IdentityUser>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddRoles<IdentityRole>();
Avec cette méthode, cette erreur a été générée InvalidOperationException: Impossible de résoudre le service pour le type «Microsoft.AspNetCore.Identity.IRoleStore1 [Microsoft.AspNetC ore.Identity.Identit yRole]» lors de la tentative d'activation de «Microsoft.AspNetCore. Identity.RoleManager1 [Microsoft.AspNet Core.Identity.Identi tyRole] '.
Je pense que vous manquez l'appel AddRoleManager. Voici une configuration similaire que j'avais, essayez:
services.AddIdentity<IdentityUser, IdentityRole>(o => { o.Password.RequiredLength = 8; }) .AddRoles<IdentityRole>() .AddRoleManager<RoleManager<IdentityRole>>() .AddDefaultTokenProviders() .AddEntityFrameworkStores<ApplicationDbContext>();
Où est votre méthode
ConfigureServices
? En supposant que vous utilisez ASP.NET Core Identity, appelez-vousservices.AddDefaultIdentity ()
n'importe où?Vérifiez ceci: ASP.NET Core Identity: aucun service pour le gestionnaire de rôles
Cette question est sans réponse sans voir comment vous avez configuré vos services. En général, si vous obtenez une exception liée au service, c'est le premier endroit à rechercher.
@ChrisPratt J'ai ajouté Startup.cs maintenant