【发布时间】:2019-07-02 14:26:15
【问题描述】:
在将 UserManager 添加到不初始化 IdentityServer4 的 API (User creation with IdentityServer4 from multiple API's) 解决了我的初始问题之后(它又在仅负责用户注册和登录的 Web 应用程序中初始化)我遇到了另一个问题。从同一个 API 中,我还希望从 IdentityServer4 的 IConfigurationDbContext 中获取客户端和资源。
到目前为止,我正在尝试以下内容: 我在 API 的启动中添加 ConfigurationDbContext,然后通过 ClientsController 和 ClientsRepository 我试图访问客户端,如下所示。
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(在 .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();
}
但是,我收到以下错误:
System.InvalidOperationException: Unable to resolve service for type 'IdentityServer4.EntityFramework.Interfaces.IConfigurationDbContext' while attempting to activate 'XXXXXX.Data.Repositories.ClientRepository'.
我猜它必须再次对服务启动做一些事情,但我似乎找不到它。
有没有人解决过类似的问题?
最好, 马里奥斯。
【问题讨论】:
标签: c# asp.net-core asp.net-identity identityserver4