アイデンティティを使用するASP.NETコアアプリケーションがあります。それは動作しますが、データベースにカスタムロールを追加しようとすると、問題が発生します。ASP.NETコアID:ロールマネージャのサービスがありません
services.AddIdentity<Entities.DB.User, IdentityRole<int>>()
.AddEntityFrameworkStores<MyDBContext, int>();
services.AddScoped<RoleManager<IdentityRole>>();
スタートアップConfigure
に私はRoleManagerを注入し、私のカスタムクラスRolesData
に渡し:
public void Configure(
IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory,
RoleManager<IdentityRole> roleManager
)
{
app.UseIdentity();
RolesData.SeedRoles(roleManager).Wait();
app.UseMvc();
私はこのようなスコープサービスとしてのアイデンティティとロールマネージャーを追加したスタートアップ
ConfigureServices
で
これは、RolesData
クラスです。
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");
}
}
}
}
}
アプリがエラーなしで構築し、それをアクセスしようとしたとき、私は次のエラーを取得:
Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IRoleStore`1[Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole]' while attempting to activate 'Microsoft.AspNetCore.Identity.RoleManager
は私が間違って何をやっているの?私の勘は、RoleManagerをサービスとしてどのように追加するかに問題があると言います。
PS:スクラッチからアイデンティティを学ぶためのプロジェクトを作成するときに「認証なし」を使用しました。
個別のユーザーアカウントを使用して別のプロジェクトを作成して、IDを含むテンプレートを使用するときの設定と比較できるようにすることをお勧めします。 –
「個別のユーザーアカウント」を追加した新しいプロジェクトには、役割。 –
いいえ、それはありませんが、正しく接続されていない依存関係を結ぶコードを持っている可能性があります –