RuoVea.ExConfig
10.0.0
dotnet add package RuoVea.ExConfig --version 10.0.0
NuGet\Install-Package RuoVea.ExConfig -Version 10.0.0
<PackageReference Include="RuoVea.ExConfig" Version="10.0.0" />
<PackageVersion Include="RuoVea.ExConfig" Version="10.0.0" />
<PackageReference Include="RuoVea.ExConfig" />
paket add RuoVea.ExConfig --version 10.0.0
#r "nuget: RuoVea.ExConfig, 10.0.0"
#:package RuoVea.ExConfig@10.0.0
#addin nuget:?package=RuoVea.ExConfig&version=10.0.0
#tool nuget:?package=RuoVea.ExConfig&version=10.0.0
📋 RuoVea.ExConfig 组件概览
RuoVea.ExConfig 是一个功能强大的配置文件获取帮助类库,支持多种配置源和灵活的配置获取方式。
🏗️ 核心架构
1. 配置扫描目录约定
自定义配置扫描目录(按优先级顺序):
ConfigurationFiles
Configuration
Config
ScanDirectories
忽略的配置文件目录:
IgnoreConfigurationFiles
IgnoreConfiguration
IgnoreConfig
IgnoreDirectories
🔧 核心功能类
1. AppSettings 静态类
主要功能方法
基础配置获取
// 方式一:直接使用静态方法
var value = AppSettings.app("keyName");
// 方式二:通过 GetValue 方法
var value = AppSettings.GetValue("demo");
节点配置获取
// 获取配置节点值
AppSettings.app(params string[] sections)
// 示例:
var connectionString = AppSettings.app("ConnectionStrings", "DefaultConnection");
var logLevel = AppSettings.app("Logging", "LogLevel", "Default");
强类型配置绑定
// 递归获取配置信息数组
AppSettings.app<T>(params string[] sections)
// 示例:
var databaseConfig = AppSettings.app<DatabaseConfig>("Database");
var appSettings = AppSettings.app<AppConfig>("AppSettings");
配置节点操作
// 获取配置节点
AppSettings.GetSection(string key)
// 示例:
var section = AppSettings.GetSection("Jwt");
var issuer = section["Issuer"];
var audience = section["Audience"];
高级配置获取
// 获取强类型配置
AppSettings.GetConfig<T>(string path, bool loadPostConfigure = false)
// 示例:
var redisConfig = AppSettings.GetConfig<RedisConfig>("Redis");
var emailConfig = AppSettings.GetConfig<EmailConfig>("Email", true);
应用设置获取
// 泛型方式获取配置
AppSettings.GetAppSettings<T>(string key) where T : class, new()
// 示例:
var smtpSettings = AppSettings.GetAppSettings<SmtpSettings>("Smtp");
var awsSettings = AppSettings.GetAppSettings<AwsSettings>("AWS");
数据库连接字符串
// 获取数据库连接字符串
AppSettings.ConnectionStrings(string keyName)
// 示例:
var defaultConn = AppSettings.ConnectionStrings("DefaultConnection");
var readOnlyConn = AppSettings.ConnectionStrings("ReadOnlyConnection");
2. ConfigUtil 工具类
多格式配置文件支持
JSON 配置获取
ConfigUtil.GetJsonConfig()
// 功能:
// - 读取 JSON 格式配置文件
// - 支持嵌套对象解析
// - 自动类型转换
// - 环境变量覆盖支持
XML 配置获取
ConfigUtil.GetXmlConfig()
// 功能:
// - 读取 XML 格式配置文件
// - XPath 支持
// - 节点属性读取
// - 命名空间处理
INI 配置获取
ConfigUtil.GetIniConfig()
// 功能:
// - 读取 INI 格式配置文件
// - 节(section)支持
// - 键值对解析
// - 注释处理
🚀 完整使用示例
1. 基础配置获取
// 获取简单配置值
var appName = AppSettings.app("AppName");
var version = AppSettings.GetValue("Version");
// 获取嵌套配置
var connectionString = AppSettings.app("ConnectionStrings", "Default");
var logLevel = AppSettings.app("Logging", "LogLevel", "Default");
// 获取整个配置节点
var jwtSection = AppSettings.GetSection("Jwt");
var issuer = jwtSection["Issuer"];
var expiryMinutes = jwtSection["ExpiryMinutes"];
2. 强类型配置绑定
定义配置类
public class DatabaseConfig
{
public string ConnectionString { get; set; }
public int Timeout { get; set; }
public bool EnableLogging { get; set; }
}
public class JwtConfig
{
public string Issuer { get; set; }
public string Audience { get; set; }
public string SecurityKey { get; set; }
public int ExpiryMinutes { get; set; }
}
public class RedisConfig
{
public string ConnectionString { get; set; }
public string InstanceName { get; set; }
public int DefaultDatabase { get; set; }
}
使用强类型配置
// 方式一:使用 app<T> 方法
var dbConfig = AppSettings.app<DatabaseConfig>("Database");
var jwtConfig = AppSettings.app<JwtConfig>("Jwt");
// 方式二:使用 GetConfig<T> 方法
var redisConfig = AppSettings.GetConfig<RedisConfig>("Redis");
var emailConfig = AppSettings.GetConfig<EmailConfig>("Email");
// 方式三:使用 GetAppSettings<T> 方法
var awsConfig = AppSettings.GetAppSettings<AwsConfig>("AWS");
3. 数据库连接管理
public class DatabaseService
{
private readonly string _connectionString;
public DatabaseService()
{
// 获取默认连接字符串
_connectionString = AppSettings.ConnectionStrings("DefaultConnection");
// 或者获取特定连接字符串
var readOnlyConn = AppSettings.ConnectionStrings("ReadOnlyConnection");
}
public void Connect()
{
using var connection = new SqlConnection(_connectionString);
connection.Open();
// 数据库操作...
}
}
4. 多环境配置支持
配置文件结构
appsettings.json
appsettings.Development.json
appsettings.Production.json
appsettings.Staging.json
环境特定配置获取
public class ConfigurationService
{
public T GetEnvironmentConfig<T>() where T : class, new()
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var configKey = $"AppSettings:{environment}";
return AppSettings.GetAppSettings<T>(configKey) ?? new T();
}
public string GetConnectionStringForEnvironment()
{
var environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var connectionStringKey = $"{environment}Connection";
return AppSettings.ConnectionStrings(connectionStringKey);
}
}
5. 配置验证和默认值
public class ConfigValidator
{
public static void ValidateEssentialConfig()
{
// 检查必要配置是否存在
var essentialKeys = new[] { "Database:ConnectionString", "Jwt:SecurityKey", "App:Name" };
foreach (var key in essentialKeys)
{
var value = AppSettings.GetValue(key.Split(':'));
if (string.IsNullOrEmpty(value))
{
throw new InvalidOperationException($"Essential configuration missing: {key}");
}
}
}
public static T GetConfigWithDefaults<T>() where T : class, new()
{
var config = AppSettings.GetAppSettings<T>("AppSettings") ?? new T();
// 设置默认值
if (config is DatabaseConfig dbConfig && string.IsNullOrEmpty(dbConfig.ConnectionString))
{
dbConfig.ConnectionString = "Server=localhost;Database=default;Trusted_Connection=true;";
}
return config;
}
}
6. 多格式配置文件示例
JSON 配置使用
var jsonConfig = ConfigUtil.GetJsonConfig();
// 假设有 appsettings.json 文件
var appName = jsonConfig["App:Name"];
var version = jsonConfig["App:Version"];
XML 配置使用
var xmlConfig = ConfigUtil.GetXmlConfig();
// 假设有 config.xml 文件
var setting1 = xmlConfig["/configuration/appSettings/add[@key='Setting1']/@value"];
INI 配置使用
var iniConfig = ConfigUtil.GetIniConfig();
// 假设有 config.ini 文件
var databaseHost = iniConfig["Database:Host"];
var databasePort = iniConfig["Database:Port"];
7. 配置变更监控
public class ConfigMonitor
{
private readonly Timer _timer;
private string _lastConfigHash;
public ConfigMonitor()
{
_timer = new Timer(CheckConfigChanges, null, TimeSpan.Zero, TimeSpan.FromMinutes(1));
}
private void CheckConfigChanges(object state)
{
var currentConfig = AppSettings.GetValue("DynamicSettings");
var currentHash = CalculateHash(currentConfig);
if (_lastConfigHash != currentHash)
{
_lastConfigHash = currentHash;
OnConfigChanged?.Invoke(this, EventArgs.Empty);
}
}
public event EventHandler OnConfigChanged;
private string CalculateHash(string input)
{
using var sha256 = SHA256.Create();
var bytes = Encoding.UTF8.GetBytes(input);
var hash = sha256.ComputeHash(bytes);
return Convert.ToBase64String(hash);
}
}
🎯 设计特点
1. 灵活的配置源支持
- JSON、XML、INI 多格式支持
- 环境变量覆盖
- 自定义配置目录扫描
- 配置忽略机制
2. 多种使用方式
- 静态方法直接调用
- 强类型配置绑定
- 节点级配置获取
- 连接字符串专门处理
3. 类型安全
- 泛型支持
- 自动类型转换
- 空值安全处理
4. 企业级特性
- 多环境配置支持
- 配置验证机制
- 配置变更监控
- 默认值处理
5. 易用性
- 简单的 API 设计
- 直观的方法命名
- 丰富的使用示例
- 灵活的配置组织
这个配置组件为 .NET 应用程序提供了完整的配置管理解决方案,支持从简单的键值对到复杂的强类型配置对象,满足各种规模的应用程序需求。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
NuGet packages (9)
Showing the top 5 NuGet packages that depend on RuoVea.ExConfig:
| Package | Downloads |
|---|---|
|
RuoVea.ExFilter
注入 进行全局的异常日志收集、执行操作日志、参数验证,支持简体中文、繁体中文、粤语、日语、法语、英语.services.ExceptionSetup();// 注入 全局错误日志处 services.ExceptionSetup(ExceptionLog actionOptions);// 注入 全局错误日志处 services.ExceptionSetup(builder.Configuration.GetSection("AopOption:ExceptionLog"));// 注入 全局错误日志处 services.RequestActionSetup();// 注入 请求日志拦截 [执行操作日志、参数验证 ] services.RequestActionSetup(RequestLog actionOptions);// 注入 请求日志拦截 [执行操作日志、参数验证 ] services.RequestActionSetup(builder.Configuration.GetSection("AopOption:RequestLog"));// 注入 请求日志拦截 [执行操作日志、参数验证 ] services.ResourceSetup();//对资源型信息进行过滤 services.ResultSetup();//对结果进行统一 services.ApISafeSetup(AppSign actionOptions);//接口安全校验 services.ApISafeSetup(builder.Configuration.GetSection("AopOption:AppSign"));//接口安全校验 services.ApISignSetup(AppSign actionOptions);//签名验证 ( appKey + signKey + timeStamp + data ); services.ApISignSetup(builder.Configuration.GetSection("AopOption:AppSign"));//签名验证 ( appKey + signKey + timeStamp + data ); services.AddValidateSetup();//模型校验 services.AddUiFilesZipSetup();//将前端UI压缩文件进行解压 不进行接口安全校验 -> NonAplSafeAttribute 不签名验证 -> NonAplSignAttribute 不进行全局的异常日志收集 -> NonExceptionAttribute 不对资源型信息进行过滤 -> NonResourceAttribute 不对结果进行统一 -> NonRestfulResultAttribute |
|
|
RuoVea.ExCache
Redis缓存 内存缓存 |
|
|
RuoVea.ExJwtBearer
Jwt 授权验证拓展插件。声名:IJwtHelper _jwtHelper,支持简体中文、繁体中文、粤语、日语、法语、英语.添加验权:services.AddAuthenticationSetup(enableGlobalAuthorize: true);添加鉴权:services.AddAuthorizationSetup.MyPermission.(enableGlobalAuthorize: true);添加Jwt加密:services.AddJwtSetup(); |
|
|
RuoVea.ExPws
集成加密工具类 AES、 Base64、DESC、HMACSHA1、HMACSHA256、HMACSHA384、HMACSHA512、MD5、JsMD5、RSA、SHA1、SHA256、SHA384、、SHA512 加密算法; 字符串加密拓展 ToMD5Encrypt、ToAESEncrypt、ToAESDecrypt、ToDESCEncrypt、ToDESCDecrypt、ToRSAEncrpyt、ToRSADecrypt,支持简体中文、繁体中文、粤语、日语、法语、英语. |
|
|
RuoVea.ExWeb
CorsUrls、IPLimit、SafeIps、Jwt 配置 |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.0.0 | 180 | 1/12/2026 |
| 9.0.0 | 976 | 7/25/2025 |
| 8.0.0.1 | 7,565 | 4/23/2025 |
| 8.0.0 | 2,094 | 3/12/2024 |
| 7.0.0.1 | 8,627 | 4/23/2025 |
| 7.0.0 | 2,388 | 3/12/2024 |
| 6.0.1.7 | 10,887 | 4/23/2025 |
| 6.0.1.6 | 10,234 | 3/12/2024 |
| 6.0.1.5 | 238 | 3/12/2024 |
| 6.0.1.4 | 242 | 3/12/2024 |
| 6.0.1.3 | 852 | 1/26/2024 |
| 6.0.1.2 | 242 | 1/26/2024 |
| 6.0.1.1 | 1,030 | 11/19/2023 |
| 6.0.1 | 6,058 | 2/16/2022 |
| 6.0.0 | 5,152 | 2/9/2022 |
| 5.0.19.2 | 1,066 | 4/23/2025 |
| 5.0.19.1 | 728 | 8/28/2024 |
| 5.0.19 | 1,016 | 3/22/2022 |
| 5.0.8 | 1,409 | 11/19/2021 |
| 5.0.7 | 2,932 | 11/5/2021 |