[英]Passing parameters to the ViewModel using a custom INavigationService Implementation?
[英]Passing Services to custom IMigrationHistory implementation
將 PostgreSQL 與 ASP.NET Core 3.1 一起使用。 我的遷移歷史表存在於它自己的架構中,因為我們有一個多租戶設置,每個租戶都與一個單獨的架構相關聯。 我現在正在嘗試通過添加新列並將自定義值放入其中(如內部版本號)來修改遷移歷史記錄表。
現在我知道我必須重新創建模式才能在初始遷移中添加新列。
但是我沒有做的是將 IConfiguration 的一個實例傳遞給我的自定義 MigrationsHistory 實現(配置包含要插入到自定義 BuildVersion 列中的內部版本號)。 這是我在 DBContext 的OnConfiguring()
方法上使用自定義替換IHistoryRepository
的代碼:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder
.UseNpgsql(
_tenantConnectionString,
npgsqlOptionsAction: npgsqlOptions =>
{
npgsqlOptions.EnableRetryOnFailure();
npgsqlOptions.MigrationsHistoryTable("__EFMigrationsHistory", _tenantDbSchema);
})
.ReplaceService<IHistoryRepository, CustomHistoryRepository>();
}
這是我的自定義遷移歷史表的代碼:
public class CustomHistoryRepository : NpgsqlHistoryRepository
{
private readonly IConfiguration _configuration;
public CustomHistoryRepository (
[NotNull] HistoryRepositoryDependencies dependencies,
IConfiguration configuration)
: base(dependencies)
{
_configuration = configuration;
}
protected override void ConfigureTable(EntityTypeBuilder<HistoryRow> history)
{
base.ConfigureTable(history);
history.Property<string>("BuildVersion")
.HasDefaultValue(_configuration["BuildVersion"] ?? "Unknown");
}
}
現在我在構建CustomHistoryTable
時無法注入 IConfiguration 。 這可能與 EF 使用內部ServiceProvider
的事實有關,因此我嘗試注入自己的,但隨后我將不得不配置所有依賴項,這很多。 我對內部 EF ServiceProvider
的懷疑是否正確,我該如何解決這個問題?
這似乎解決了為您自己的ServiceProvider
提供最少輸入的問題,從而將所有服務(包括 IConfiguration)暴露給CustomHistoryProvider
:
services.AddDbContext<ApplicationDbContext>(
options => options
.UseInternalServiceProvider(services
.AddEntityFrameworkNpgsql()
.AddEntityFrameworkProxies()
.AddScoped<IHistoryRepository, CustomHistoryRepository>()
.BuildServiceProvider())
.UseLazyLoadingProxies()
.EnableSensitiveDataLogging(enableSensitiveDataLogging));
請注意, AddEntityFrameworkNpgsql()
的使用特定於 PostgreSQL 的 Npgsql 提供程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.