从配置文件中获取独立于UI的配置

时间:2018-03-29 10:57:03

标签: c# .net

我必须使用没有实体框架(学校分配)的存储库模式来创建具有N层架构的项目。我希望能够从独立于UI的配置文件中获取配置设置,这样我就可以使用正确的连接字符串,因为它必须支持多种数据库类型。

我想在我的n层架构上使用WPF UI和ASP.NET网站,并以完全相同的方式读取配置文件

在WPF项目中,它使用App.config,但在ASP.NET Core 2.0中,它使用Appsettings.json。

这是我的App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  <appSettings>
    <!-- Context has to be set to use the right database-->
    <add key="Context" value="MSSQL"/>
  </appSettings>
  <connectionStrings>
    <add name="MSSQL" connectionString="my connectionstring here"/>
    <add name="ORACLE" connectionString="my connectionstring here"/>
  </connectionStrings>
</configuration>

这是appsettings.json

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "Context":  {
    "ContextType": "MSSQL"
  },
  "ConnectionStrings":  {
    "MSSQL": "connectionstring",
    "ORACLE": "connectionstring",
    "MYSQL": "connectionstring"
  }
}

我从app.config获取上下文和连接字符串,如下所示:

Context = ConfigurationManager.AppSettings["Context"];
ConnString = ConfigurationManager.ConnectionStrings[ConfigurationManager.AppSettings["Context"]].ConnectionString;

我知道ASP.NET Core 2.0没有ConfigurationManager类。但是,是否有办法以完全相同的方式从UI(WPF和ASP.NET)获取配置设置?理想情况下,我更喜欢与ConfigurationManager类似的方法

如果有人能指出我如何处理这个问题,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

实际上有一种更简单的方法:) - 这是最佳实践

How to read AppSettings values from Config.json in ASP.NET Core

对于Wpf,您应该使用ConfigurationManager,这是一个简单的方法,因为它是Microsoft希望使用/使用它的方式。 但是,您可以为Wpf实现类似上面的功能,但是您必须记住,当您偏离“内置”方法时需要付出代价 - 比如部署 - 使用app.config允许您修改配置而无需重新部署,从天蓝色门户网站等进行修改

答案 1 :(得分:0)

我通过添加一个名为&#34; ConfigSettings&#34;的类来解决这个问题。看起来像这样:

    private string ConnString;
    private string Context;

    public Factory(IConfig config)
    {
        this.ConnString = config.Connstring;
        this.Context = config.Context;

    }

然后我把它传递给我的工厂:

fft

厂:

fft

现在我要为.NET核心所做的就是创建ConfigSettings类并从appsettings.json获取配置并将其传递给我的工厂。

如果这是不好的做法,我很乐意听到它。