文章

.NET Core前后端分离(2) - 配置文件与变量

在代码中,为了避免代码复用,以及在没有编译条件时能调整程序内部的一些设置,常常需要有一个配置中心,方便快速更改整个程序的全局变量,所以我们先来编写好配置中心的相关代码

在代码中编写全局变量的一些方法

  1. 使用定义全局静态类,添加静态变量,方便修改,全局可用
  2. 采用依赖注入的方式在项目中注入一个Singleton的变量,使其在整个项目周期中都可以使用

这两种,都是直接写在代码中的配置,所以我们需要一种可以直接通过非代码文件操作配置,并方便快速取用的方法

项目目录中,默认有appssettings.json文件,用于储存一些项目配置,所以我们需要将取用的方式封装成方便我们取用的方式

通过封装官方接口来注入配置

为了让项目层次更清晰,我们先在当前解决方案添加一个新的类库,取名Hanabi.Flow.Common,在类库下创建一个新的Helpers文件夹,并添加文件,名为AppSettings.cs

在新建的类库项目中安装Microsoft.Extensions.Configuration.Json包,在新建文件的类中添加构造函数,并传入IConfiguration,此时代码为

1
2
3
4
5
6
static IConfiguration Configuration { get; set; }

public AppSettings(IConfiguration configuration)
{
    Configuration = configuration;
}

这里的IConfiguration是之后会在项目启动注入服务时传入的,这里定义一个方函数,方便我们快速获取Configuration中的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// <summary>
/// 封装要操作的字符
/// </summary>
/// <param name="sections">节点配置</param>
/// <returns></returns>
public static string app(params string[] sections)
{
    try
    {

        if (sections.Any())
        {
            // 获取配置中的对应内容
            return Configuration[string.Join(":", sections)];
        }
    }
    catch (Exception) { }

    return "";
}

最后,我们在主项目中引用当前类库项目,整个项目的Startup.cs处对这个类进行注入,在ConfigureServices函数中增加内容

1
services.AddSingleton(new AppSettings(Configuration));

在项目中使用注入好的配置类

在默认的Controller中,添加新的函数,测试注入的配置类已经生效,正确获取到了默认配置文件的内容

1
2
3
4
5
6
7
8
9
/// <summary>
/// 获取配置文件内容
/// </summary>
/// <returns></returns>
[HttpGet]
public string GetSetting()
{
    return AppSettings.app("Logging", "LogLevel", "Default");
}
本文由作者按照 CC BY 4.0 进行授权