Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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# 如何在ASP.NET Core的DI注入器中注册映射到同一类型的两个配置_C#_Asp.net Core_Dependency Injection - Fatal编程技术网

C# 如何在ASP.NET Core的DI注入器中注册映射到同一类型的两个配置

C# 如何在ASP.NET Core的DI注入器中注册映射到同一类型的两个配置,c#,asp.net-core,dependency-injection,C#,Asp.net Core,Dependency Injection,假设我们在appSettings.json文件中有两个连接字符串,这只是一个示例,我正在寻找一种更好的方法来实现它,而不管我在配置什么: "ImportDb": { "StringConexao": "data source=server_n1;initial catalog=MyImportDb;user id=SYSDBA;password=masterkey;Charset=UTF8;", "Bool

假设我们在appSettings.json文件中有两个连接字符串,这只是一个示例,我正在寻找一种更好的方法来实现它,而不管我在配置什么:

  "ImportDb": {
    "StringConexao": "data source=server_n1;initial catalog=MyImportDb;user id=SYSDBA;password=masterkey;Charset=UTF8;",
    "BooleanProperty": false
  },
  "MainDb": {
    "StringConexao": "data source=server_n1;initial catalog=MyMainDb;user id=SYSDBA;password=masterkey;Charset=UTF8;",
    "BooleanProperty": false
  },
今天,我解决了映射到两种不同类型的问题:

public class DbConfig
{
    public string StringConexao { get; set; }
    public bool BooleanProperty { get; set; }
}

public class LocalDbConfig: DbConfig
{

}
在DI中注册如下:

serviceCollection.Configure<DbConfig>(DadosConfig.GetSection("MainDb"));
serviceCollection.Configure<LocalDbConfig>(DadosConfig.GetSection("ImportDb"));
servicecolection.Configure(dadoconfig.GetSection(“MainDb”);
Configure(dadoconfig.GetSection(“ImportDb”);
为什么我会这样解决:

  • 两种配置具有完全相同的属性。它们只在使用的类别上有所不同
  • 在上述字符串连接的情况下,2个配置甚至可以引用两个不同网络上的不同服务器
  • 我不能将它们视为一个列表(我需要能够在构造函数上处理一个或另一个)
它有一些缺点:

  • 由于这两种类型都是后代,如果某些需求发生变化,并且使用其中一种配置的类也需要接受另一种配置,那么我不能为每种类型的DbConfig分别使用两个构造函数——这会混淆DI注入器
所以我问:有一种更“优雅”的方法来做这种映射吗

免责声明:

  • user id=SYSDBA;password=masterkey
    是FirebirdSQL db服务器的默认登录/密码。这是众所周知的多年
  • 对于那些好奇的人来说,“StringConexao”的意思是“ConnectionString”