如何解决将编译时字符串传递给类
我需要在编译时将 const 字符串传递给一个类。我有一个 MigrationHistoryRepository 类。而且我需要为每个使用它的 DbContext 使用不同的模式名称。我希望像这种通用方法这样的东西会起作用,但它不起作用。有没有办法做到这一点?
public abstract class TextDbContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder options)
{
if(!string.IsNullOrWhiteSpace(ConnectionString))
{
options.UsesqlServer(ConnectionString);
options.ReplaceService<IHistoryRepository,MigrationHistoryRepository<"MyTestSchema">>(); // Chaning EF history naming convention
}
}
}
public class MigrationHistoryRepository<T> : sqlServerHistoryRepository where T : string
{
public MigrationHistoryRepository(HistoryRepositoryDependencies dependencies)
: base(dependencies)
{
}
protected override string TableName { get { return "migration_history"; } }
protected override string TableSchema => T;
protected override void ConfigureTable(EntityTypeBuilder<HistoryRow> history)
{
base.ConfigureTable(history);
history.HasKey(h => h.MigrationId).HasName($"{TableName}_pkey");
history.Property(h => h.MigrationId).HasColumnName("id");
history.Property(h => h.ProductVersion).HasColumnName("product_version");
}
}
!!!!!!编辑!!!!!!
编辑已移至单独的问题
DependencyInjection cannot find the assebly
解决方法
您不能将字符串传递给泛型,只能传递类型。但是这里有一个类型要传递。
public class MigrationHistoryRepository<T> : SqlServerHistoryRepository where T : DbContext
和
options.ReplaceService<IHistoryRepository,MigrationHistoryRepository<TextDbContext>>();
然后从 typeof(T)
中可用的数据中派生架构名称,例如其名称,或您放置在其上的自定义属性,或通过反射调用的静态属性或方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。