C# 在C中如何将不同的DB上下文从两个派生类传递到基类#
我正在开发一个ASP.Net核心API,它将托管在OnPrem或Azure上 我有两个数据库上下文,C# 在C中如何将不同的DB上下文从两个派生类传递到基类#,c#,asp.net-core,inheritance,asp.net-web-api,dependency-injection,C#,Asp.net Core,Inheritance,Asp.net Web Api,Dependency Injection,我正在开发一个ASP.Net核心API,它将托管在OnPrem或Azure上 我有两个数据库上下文,KeyVaultDB和SQLDB。两个都有相同的桌子 我有一个界面: public interface ISecretsProvider { Dictionary<string,string> GetSecretNames(string env); string GetSecret(string key); bool SecretsExistForEnv(str
KeyVaultDB
和SQLDB
。两个都有相同的桌子
我有一个界面:
public interface ISecretsProvider
{
Dictionary<string,string> GetSecretNames(string env);
string GetSecret(string key);
bool SecretsExistForEnv(string ev);
}
在我的Startup.CS
中,基于环境变量,我对以下任一派生类进行依赖项注入:
public class KeyVaultSecretProvider : SecretsProvider
{
public override string GetSecret(string key)
{
....
...
}
}
public class SQLSecretProvider : SecretsProvider
{
public override string GetSecret(string key)
{
....
...
}
}
var envVariable = Environment.GetEnvironmentVariable("");
if(envVariable.Equals("true")
{
services.AddTransient<IsecretsProvider, KeyVaultSecretProvider>();
}
else
{
services.AddTransient<IsecretsProvider, SQLSecretProvider>();
}
我不知道如何在基类中分配\u上下文
。在启动时,如果注入了KeyVaultSecretsProvider
,则必须使用KeyVaultDB
上下文来获取基类中的secretnames
如果注入了
SQLSecretsProvider
,则必须使用SQLDB
上下文来获取基类中的secretnames。如何将\u context
传递给类?您可以使用与机密提供程序相同的方法。基于flagYes在DI中注册适当的上下文类。我也考虑过这个问题,但是如何为_context变量指定正确的上下文呢。在分配上下文之前,必须声明上下文的类型。这就是问题所在。SecretsProvider类的构造函数应该将上下文作为参数。与ConfigProvider相同,构造函数将IsCretsProvider作为参数
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);
...
...
}
}