在asp.net core中,我么在startup.cs或者控制器中可以通过依赖注入或者其他方法很方便的读取配置文件的内容,但是在实际项目开发过程中,我们肯定不是这么简单的处理。一般情况下,我们都会通过一个公共的方法完成配置文件的读取,有时候还需要将配置文件映射到对应的实体类,方便其他人员调用。
这里我们通过将公共方法放到单独的类库,让后将配置文件转换成强类型的实体类
首先我们添加对应的类库项目然后添加nuget包
对于如何创建项目,这里不再赘述,主要说明需要引入的包如下:
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.FileExtensions
修改配置文件
修改自己的配置文件,加入相应的配置信息,比如我的配置文件如下
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"SysConfig": {
"LoginProvider": "Cookie" //登陆提供者模式:Session、Cookie
}
}
根据配置文件建立实体类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace me.lisen.Bussiness.Entity
{
public class SysConfig
{
public string LoginProvider { get; set; } //登陆提供者模式:Session、Cookie
}
}
建立公共方法,获取配置文件
/*
* 获取配置文件
* @lisen
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using Microsoft.Extensions.Configuration;
using System.IO;
using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using me.lisen.Bussiness.Entity;
namespace me.lisen.FrameworkCore.Util.config
{
public static class ConfigManager
{
static IConfiguration config = null;
static ConfigManager()
{
string currentClassDir = AppContext.BaseDirectory;
if (config == null)
{
config = new ConfigurationBuilder()
.SetBasePath(currentClassDir)
.AddJsonFile("appsettings.json", false, true)
.Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true })
.Build();
}
}
/// <summary>
/// 获取系统公共配置文件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public static T GetValue<T>() where T : class, new()
{
T sysConfig = new T();
try
{
config.GetSection("SysConfig").Bind(sysConfig);
}
catch (Exception ex)
{
sysConfig = null;
}
return sysConfig;
}
/// <summary>
/// 获取单一节点配置文件
/// </summary>
/// <param name="key">节点,如果是多级节点需要按照:分隔的方式传递</param>
/// <returns></returns>
public static string GetValue(string key)
{
return config.GetSection(key).Value.ToString().Trim();
}
}
}
界面调用
界面调用就比较简单了,在cshtml页面,直接调用公共方法,获取参数即可
是啊 需要密码~无法看到密码
好东西,谢谢