我有一些集成测试,它们使用真正的数据库来获取ConfigurationDbContext。升级到Duende 6.0时,由于添加了IdentityServer连接池特性,ConfigurationDbContext的构造函数中断(只接受1 arg而不是2)。
此代码破坏:
public static ConfigurationDbContext GetConfigurationDbContext()
{
var connectionString = Configuration.GetConnectionString("ConfigurationDbContext");
var builder = new DbContextOptionsBuilder<ConfigurationDbContext>();
builder.UseSqlServer(connectionString);
var options = new ConfigurationStoreOptions
{
DefaultSchema = Schema.IdSrv
};
return new ConfigurationDbContext(builder.Options, options);
}所以我把它改成:
return new ConfigurationDbContext(builder.Options);现在我可以构建了,但是我的测试失败了,出现了以下错误:
Unable to resolve service for type 'Duende.IdentityServer.EntityFramework.Options.ConfigurationStoreOptions'
我该怎么通过ConfigurationStoreOptions呢?查看Github中的代码,它看起来依赖于依赖项注入。(从服务集合中获取选项)。
发布于 2022-09-01 20:09:35
好吧,我想出了我自己的问题,但我不得不四处搜寻。它没有被列为升级文档中的重大更改:
https://docs.duendesoftware.com/identityserver/v6/upgrades/v5.2_to_v6.0/
解决方案是将项目升级到6.1
<PackageReference Include="Duende.IdentityServer.EntityFramework.Storage" Version="6.1.5" />然后可以使用此代码(StoreOptions已成为公共集属性)
public static ConfigurationDbContext GetConfigurationDbContext()
{
var connectionString = Configuration.GetConnectionString("MyIdentity");
var builder = new DbContextOptionsBuilder<ConfigurationDbContext>();
builder.UseSqlServer(connectionString);
var options = new ConfigurationStoreOptions
{
DefaultSchema = Schema.IdSrv
};
var dbContext = new ConfigurationDbContext(builder.Options);
dbContext.StoreOptions = options;
return dbContext;
}这将适用于ConfigurationDbContext和PersistedGrantDbContext。
https://stackoverflow.com/questions/73574945
复制相似问题