Setelah menyelesaikan masalah awal saya dengan menambahkan UserManager ke API (Pembuatan pengguna dengan IdentityServer4 dari beberapa API) yang tidak menginisialisasi IdentityServer4 (yang pada gilirannya diinisialisasi di dalam aplikasi web hanya bertanggung jawab untuk registrasi dan login pengguna) Saya mengalami masalah lain. Dari API yang sama saya juga ingin mendapatkan Klien dan Sumber Daya dari IConfigurationDbContext dari IdentityServer4.
Apa yang saya coba sejauh ini adalah sebagai berikut: Saya menambahkan ConfigurationDbContext di startup API dan kemudian melalui ClientsController dan ClientsRepository saya mencoba mengakses klien seperti yang ditunjukkan di bawah ini.
Startup.cs
services.AddDbContext<ApplicationDbContext>(options =>
options.UseNpgsql(defaultConnection, db => db.MigrationsAssembly("XXXXXXX"))
);
services.AddDbContext<ConfigurationDbContext>(options =>
options.UseNpgsql(defaultConnection, db => db.MigrationsAssembly("XXXXXXXX"))
);
services.AddIdentityCore<ApplicationUser>(options => {
options.Password.RequireNonAlphanumeric = false;
});
new IdentityBuilder(typeof(ApplicationUser), typeof(IdentityRole), services)
.AddRoleManager<RoleManager<IdentityRole>>()
.AddSignInManager<SignInManager<ApplicationUser>>()
.AddEntityFrameworkStores<ApplicationDbContext>();
ClientsRepository.cs (di .DataAccess):
private readonly IConfigurationDbContext _context;
public bool AutoSaveChanges { get; set; } = true;
public ClientRepository(IConfigurationDbContext context)
{
_context = context;
}
public Task<Client> GetClientAsync(int id)
{
return _context.Clients
.Include(x => x.AllowedGrantTypes)
.Include(x => x.RedirectUris)
.Include(x => x.PostLogoutRedirectUris)
.Include(x => x.AllowedScopes)
.Include(x => x.ClientSecrets)
.Include(x => x.Claims)
.Include(x => x.IdentityProviderRestrictions)
.Include(x => x.AllowedCorsOrigins)
.Include(x => x.Properties)
.Where(x => x.Id == id)
.SingleOrDefaultAsync();
}
Namun, saya mendapatkan kesalahan berikut:
System.InvalidOperationException: Unable to resolve service for type 'IdentityServer4.EntityFramework.Interfaces.IConfigurationDbContext' while attempting to activate 'XXXXXX.Data.Repositories.ClientRepository'.
Saya kira lagi-lagi ada hubungannya dengan layanan Startup, tetapi sepertinya saya tidak dapat menemukannya.
Adakah yang memecahkan hal serupa?
Yang terbaik, Marios.