Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中如何将不同的DB上下文从两个派生类传递到基类#_C#_Asp.net Core_Inheritance_Asp.net Web Api_Dependency Injection - Fatal编程技术网

C# 在C中如何将不同的DB上下文从两个派生类传递到基类#

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

我正在开发一个ASP.Net核心API,它将托管在OnPrem或Azure上

我有两个数据库上下文,
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);
        ...
        ...
    }
}