Tôi có một ứng dụng ASP.NET Core sử dụng danh tính. Nó hoạt động, nhưng khi tôi cố gắng thêm các vai trò tùy chỉnh vào cơ sở dữ liệu, tôi gặp phải các vấn đề.Bản sắc lõi ASP.NET: Không có dịch vụ cho người quản lý vai trò
Trong Startup ConfigureServices
Tôi đã thêm danh tính và người quản lý vai trò như một dịch vụ scoped như thế này:
services.AddIdentity<Entities.DB.User, IdentityRole<int>>()
.AddEntityFrameworkStores<MyDBContext, int>();
services.AddScoped<RoleManager<IdentityRole>>();
và trong Startup Configure
tôi tiêm RoleManager và vượt qua nó đến lớp tùy chỉnh của tôi RolesData
:
public void Configure(
IApplicationBuilder app,
IHostingEnvironment env,
ILoggerFactory loggerFactory,
RoleManager<IdentityRole> roleManager
)
{
app.UseIdentity();
RolesData.SeedRoles(roleManager).Wait();
app.UseMvc();
Đây là lớp 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");
}
}
}
}
}
Ứng dụng được xây dựng mà không có lỗi, nhưng khi cố gắng truy cập vào nó tôi nhận được lỗi sau:
Unable to resolve service for type 'Microsoft.AspNetCore.Identity.IRoleStore`1[Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole]' while attempting to activate 'Microsoft.AspNetCore.Identity.RoleManager
Tôi đang làm gì sai? Ruột của tôi nói có điều gì đó sai trái với cách tôi thêm RoleManager như một dịch vụ.
PS: Tôi đã sử dụng "Không xác thực" khi tạo dự án để tìm hiểu Danh tính từ đầu.
Tôi đề xuất tạo một dự án khác bằng tài khoản người dùng cá nhân để bạn có thể so sánh với những gì được thiết lập cho bạn khi bạn sử dụng mẫu bao gồm nhận dạng –
Một dự án hoàn toàn mới với "tài khoản người dùng cá nhân" được thêm vào không chứa bất kỳ mã nào được thiết lập vai trò. –
không có, nhưng nó có thể có một số mã dây lên phụ thuộc bạn đã không dây lên một cách chính xác –