c# - 如何将不同的数据库上下文从两个派生类传递给 C# 中的基类
问题描述
我正在开发一个将托管在 OnPrem 或 Azure 上的 ASP.Net Core API。
我有两个数据库上下文,KeyVaultDB
并且SQLDB
. 两者都有相同的表。
我有一个界面:
public interface ISecretsProvider
{
Dictionary<string,string> GetSecretNames(string env);
string GetSecret(string key);
bool SecretsExistForEnv(string ev);
}
这是在基类中实现的:
public class SecretsProvider : ISecretsProvider
{
public Dictionary<string,string> GetSecretNames(string env)
{
var result = _context.KeyVaultVersions.Select();
...
...
}
public virtual string GetSecret(string key)
{
throw new NotImplementedException();
}
public bool SecretsExistForEnv(string env)
{
var result = _context.KeyVautlVersions.Select();
...
...
}
}
我有两个派生类:
public class KeyVaultSecretProvider : SecretsProvider
{
public override string GetSecret(string key)
{
....
...
}
}
public class SQLSecretProvider : SecretsProvider
{
public override string GetSecret(string key)
{
....
...
}
}
在我的Startup.CS
中,基于环境变量,我对任一派生类进行依赖注入:
var envVariable = Environment.GetEnvironmentVariable("");
if(envVariable.Equals("true")
{
services.AddTransient<IsecretsProvider, KeyVaultSecretProvider>();
}
else
{
services.AddTransient<IsecretsProvider, SQLSecretProvider>();
}
在不同的班级:
public class ConfigProvider
{
private ISecretsProvider _secretsProvider;
public ConfigProvider(ISecretsProvider provider)
{
_secretsProvider = provider;
}
public JObject GetConfig(string env)
{
var result = _secretsProvider.GetSecretNames(env);
...
...
}
}
我不知道如何_context
在基类中分配。在启动时,如果KeyVaultSecretsProvider
被注入,则KeyVaultDB
必须使用上下文来获取基类中的秘密名称。
如果SQLSecretsProvider
注入,则SQLDB
必须使用上下文来获取基类中的秘密名称。
解决方案
推荐阅读
- asp.net - 如何通过通往公共 URL 的隧道免费托管我的 ASP.NET localhost 网站?
- python - Pip安装问题
- c# - 同一个字段名在类或其父类中被序列化多次
- bash - 为什么测试第一个字符会跳过空行?
- tcp - 如何使每个 MQTT Publih 消息在单独的数据包中?
- sql-server - SQL server 位类型 Access 链接表
- coded-ui-tests - 如何在codedui中选择正确的组合框
- azure - 如何从 azure 数据湖中读取行分隔的 json 文件并使用 usql 进行查询
- powershell - 将 dir 输出作为参数传递给另一个命令
- python - Django REST Framework,保存到自定义用户模型的额外字段