ASP.NET de Base de l'Identité: Pas de service pour rôle de manager

J'ai un ASP.NET Core application qui utilise l'Identité. Cela fonctionne, mais lorsque j'essaie d'ajouter des rôles de la base de données j'ai des problèmes.

En Démarrage ConfigureServices j'ai ajouté de l'Identité et le rôle de gestionnaire d'étendue de ce type de service:

services.AddIdentity<Entities.DB.User, IdentityRole<int>>()
                .AddEntityFrameworkStores<MyDBContext, int>();

services.AddScoped<RoleManager<IdentityRole>>();

et de Démarrage Configure j'injecte RoleManager et de le passer à ma classe personnalisée RolesData:

    public void Configure(
        IApplicationBuilder app, 
        IHostingEnvironment env, 
        ILoggerFactory loggerFactory,
        RoleManager<IdentityRole> roleManager
    )
    {

    app.UseIdentity();
    RolesData.SeedRoles(roleManager).Wait();
    app.UseMvc();

C'est le RolesData classe:

public static class RolesData
{

    private static readonly string[] roles = new[] {
        "role1",
        "role2",
        "role3"
    };

    public static async Task SeedRoles(RoleManager<IdentityRole> roleManager)
    {

        foreach (var role in roles)
        {

            if (!await roleManager.RoleExistsAsync(role))
            {
                var create = await roleManager.CreateAsync(new IdentityRole(role));

                if (!create.Succeeded)
                {

                    throw new Exception("Failed to create role");

                }
            }

        }

    }

}

L'application appuie sans erreurs, mais lorsque j'essaie d'accéder à ce que je reçois l'erreur suivante:

Parvenez pas à résoudre pour le type de service 'Microsoft.AspNetCore.Identity.IRoleStore`1[Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole]' lors de la tentative pour activer Microsoft.AspNetCore.L'identité.RoleManager

Ce que je fais mal? Mon petit doigt me dit qu'il y a quelque chose de mal avec la façon dont je ajouter de la RoleManager en tant que service.

PS: j'ai utilisé "Aucune authentification" lors de la création du projet à savoir l'Identité à partir de zéro.

Je suggère de créer un autre projet à l'aide de comptes d'utilisateur individuels de sorte que vous pouvez comparer à ce qui est de l'installation pour vous lorsque vous utilisez le modèle qui comprend l'identité
Un tout nouveau projet avec "comptes d'utilisateurs individuels", a ajouté ne contiennent pas de code qui définit les rôles.
non, il n'est pas, mais il pourrait avoir un peu de code que les fils jusqu'dépendances vous n'avez pas câblé correctement
Sur une autre note, vous devez éviter d'injecter l'étendue des dépendances comme RoleManager dans le Configure méthode, car elle permettra d'éviter le sous-jacent DbContext d'être éliminés correctement. Au lieu de cela, pensez à utiliser IServiceScopeFactory.CreateScope() pour créer un champ d'application du service qui seront vendus lors de votre SeedRoles méthode retourne (vous pouvez prendre un coup d'oeil à github.com/openiddict/openiddict-samples/blob/master/samples/... pour un exemple)

OriginalL'auteur Glenn Utter | 2017-01-02