RuoVea.ExDto 9.0.0.4

There is a newer version of this package available.
See the version list below for details.
dotnet add package RuoVea.ExDto --version 9.0.0.4
                    
NuGet\Install-Package RuoVea.ExDto -Version 9.0.0.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="RuoVea.ExDto" Version="9.0.0.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="RuoVea.ExDto" Version="9.0.0.4" />
                    
Directory.Packages.props
<PackageReference Include="RuoVea.ExDto" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add RuoVea.ExDto --version 9.0.0.4
                    
#r "nuget: RuoVea.ExDto, 9.0.0.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package RuoVea.ExDto@9.0.0.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=RuoVea.ExDto&version=9.0.0.4
                    
Install as a Cake Addin
#tool nuget:?package=RuoVea.ExDto&version=9.0.0.4
                    
Install as a Cake Tool

RuoVea.ExDto

RuoVea.ExDto 是一个用于管理和获取枚举与常量元数据的 .NET Core 库,提供了高效的缓存机制和灵活的 API,方便在应用程序中使用和展示枚举值与常量。

特性

  • 枚举元数据管理:支持通过反射自动获取所有枚举类型及其属性
  • 常量元数据管理:支持获取常量的特性信息
  • 高效缓存机制:使用线程安全的 ConcurrentDictionary 缓存元数据,避免重复反射操作
  • 层级结构支持:通过 Children 属性支持构建树形结构
  • 灵活的 API:提供多种方法获取枚举和常量信息
  • Display 属性支持:充分利用 .NET 的 DisplayAttribute 实现丰富的元数据定义

安装

  1. 克隆项目或下载源码
  2. 使用 Visual Studio 打开项目文件
  3. 编译生成 DLL 文件
  4. 在其他项目中引用生成的 DLL

核心组件

1. DisplayInfo

DisplayInfo 是用于存储枚举值和常量元数据的核心类,包含以下属性:

public class DisplayInfo
{
    public string Value { get; set; }          // 值
    public string Name { get; set; }           // 显示名称
    public string ShortName { get; set; }      // 短名称
    public string Description { get; set; }    // 描述
    public string GroupName { get; set; }      // 分组名称
    public int Order { get; set; }             // 排序顺序
    public string Key { get; set; }            // 键名
    public List<DisplayInfo> Children { get; set; } // 子项列表
}

2. EnumManager

EnumManager 是用于管理枚举的工具类,提供以下主要方法:

GetAllEnumTypesInfo

获取所有枚举类型的信息,包含子项。

// 获取所有枚举类型信息
List<DisplayInfo> allEnumTypes = EnumManager.GetAllEnumTypesInfo();
GetSpecifiedEnumInfo

根据枚举类型名称获取指定枚举的信息。

// 获取指定枚举类型信息
DisplayInfo adminTypeInfo = EnumManager.GetSpecifiedEnumInfo("AdminType");
GetEnumItems<T>

获取单个枚举的所有项。

// 获取指定类型枚举的所有项
List<DisplayInfo> adminTypes = EnumManager.GetEnumItems<AdminType>();
GetEnumDictionary<T>

获取简单字典格式的枚举信息(值->描述)。

// 获取枚举字典
Dictionary<int, string> adminTypeDict = EnumManager.GetEnumDictionary<AdminType>();
ClearEnumTypesCache

清除枚举类型信息缓存。

// 清除缓存
EnumManager.ClearEnumTypesCache();

3. ClaimConst

ClaimConst 包含用户登录相关的常量定义和获取常量特性数据的方法:

GetAllConstantInfos

获取所有常量特性数据。

// 获取所有常量特性数据
List<DisplayInfo> allConstants = ClaimConst.GetAllConstantInfos();

使用示例

枚举定义

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace RuoVea.ExEnum;

/// <summary>
/// 账号类型
/// </summary>
[Description("accounttype")]
public enum AdminType
{
    /// <summary>
    /// 普通账号
    /// </summary>
    [Description("normalaccount")]
    [Display(Name ="0", ShortName = "None", Description = "普通账号", GroupName = "AdminType", Order = 1)]
    None = 0,

    /// <summary>
    /// 管理员
    /// </summary>
    [Description("adminaccount")]
    [Display(Name = "1", ShortName = "Admin", Description = "管理员", GroupName = "AdminType", Order = 2)]
    Admin = 1,

    /// <summary>
    /// 超级管理员
    /// </summary>
    [Description("superadminaccount")]
    [Display(Name = "2", ShortName = "SuperAdmin", Description = "超级管理员", GroupName = "AdminType", Order = 3)]
    SuperAdmin = 2,
}

常量定义

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace RuoVea.ExDto;

/// <summary>
/// 用户登录基本信息
/// </summary>
[Description("userloginbasic")]
public partial class ClaimConst
{
    /// <summary>
    /// 用户Id
    /// </summary>
    [Description("userid")]
    [Display(Name = "UserId", ShortName = "userid", Description = "用户ID", GroupName = "UserInfo", Order = 1)]
    public const string CLAINM_USERID = "UserId";
    
    // 其他常量定义...
}

获取所有枚举类型信息

// 获取所有枚举类型信息
var allEnumTypes = EnumManager.GetAllEnumTypesInfo();

// 遍历所有枚举类型
foreach (var enumType in allEnumTypes)
{
    Console.WriteLine($"枚举类型:{enumType.Name}");
    Console.WriteLine($"描述:{enumType.Description}");
    
    // 遍历枚举值
    foreach (var enumValue in enumType.Children)
    {
        Console.WriteLine($"  - 值:{enumValue.Value},名称:{enumValue.Name},描述:{enumValue.Description}");
    }
}

获取指定枚举类型信息

// 获取指定枚举类型信息
var adminTypeInfo = EnumManager.GetSpecifiedEnumInfo("AdminType");

if (adminTypeInfo != null)
{
    Console.WriteLine($"枚举类型:{adminTypeInfo.Name}");
    
    // 遍历枚举值
    foreach (var enumValue in adminTypeInfo.Children)
    {
        Console.WriteLine($"  - 值:{enumValue.Value},名称:{enumValue.Name},描述:{enumValue.Description}");
    }
}

获取常量特性数据

// 获取所有常量特性数据
var allConstants = ClaimConst.GetAllConstantInfos();

// 按分组显示常量
var groupedConstants = allConstants.GroupBy(c => c.GroupName).OrderBy(g => g.Key);

foreach (var group in groupedConstants)
{
    Console.WriteLine($"分组:{group.Key}");
    
    foreach (var constant in group.OrderBy(c => c.Order))
    {
        Console.WriteLine($"  - 名称:{constant.Name},值:{constant.Value},描述:{constant.Description}");
    }
}

🏗️ 组件架构

1. 常量定义 (ClaimConst)

用户登录基本信息常量:

// 用户身份信息
CLAINM_USERID       // 用户Id
CLAINM_ACCOUNT      // 账号
CLAINM_NAME         // 名称
CLAINM_ROLEIDS      // 角色Id列表
CLAINM_ISADMIN      // 是否管理员
CLAINM_SUPERADMIN   // 是否超级管理员
TENANT_ID           // 租户Id

// 用户详细信息
RealName            // 真实姓名
NickName            // 昵称
AccountType         // 账号类型
OrgId               // 组织机构Id
OrgName             // 组织机构名称
OpenId              // 微信OpenId
LoginMode           // 登录模式(PC/APP)

2. 实体接口基类体系

🔗 接口继承关系
IDataEntity
├── IAuditableEntity    (审计信息)
├── IDeletedEntity      (逻辑删除)
└── IPrimaryKeyEntity   (主键标识)
📝 详细接口定义

IAuditableEntity - 审计实体接口

public interface IAuditableEntity
{
    DateTime? CreateTime { get; set; }    // 创建时间
    long? Creator { get; set; }           // 创建人ID
    DateTime? ModifyTime { get; set; }    // 修改时间
    long? Modifier { get; set; }          // 修改人ID
}

IDeletedEntity - 逻辑删除接口

public interface IDeletedEntity
{
    IsDelete? IsDelete { get; set; }      // 逻辑删除状态
}

IPrimaryKeyEntity - 主键实体接口

public interface IPrimaryKeyEntity
{
    long Id { get; set; }                 // 主键ID
}

IDataEntity - 完整数据实体接口

public interface IDataEntity : IAuditableEntity, IDeletedEntity, IPrimaryKeyEntity
{
    // 继承所有审计、删除、主键功能
}

ITenantEntity - 租户实体接口

public interface ITenantEntity
{
    long? TenantId { get; set; }          // 租户ID
}

3. 枚举类型系统

 // 获取当前程序集中的所有枚举
 var enums = EnumManager.GetAllEnums(Assembly.GetExecutingAssembly());
🔢 系统管理枚举

AdminType - 账号类型

// 定义不同的账号角色类型

BusinessType - 业务枚举

// 各种业务类型分类

CategoryEnum - 账号类别

// 账号分类枚举

CodeStatus - HTTP状态码

// 标准化HTTP状态码定义

DataOpType - 数据操作类型

// 增删改查等数据操作类型

DataScopeType - 数据范围

// 数据权限范围定义
⚠️ 错误状态枚举

ErrorEnum - 系统错误码

// 统一错误代码定义
// 示例:
// SUCCESS = 0,
// PARAM_ERROR = 1001,
// AUTH_FAILED = 2001,
// SYSTEM_ERROR = 5001
👥 基础数据枚举

Gender - 性别

// 男、女、未知等

IsDelete - 逻辑删除状态

// 示例:
// NotDeleted = 0,    // 未删除
// Deleted = 1        // 已删除

LoginType - 登陆类型

// 密码登录、短信登录、微信登录等

MenuType - 系统菜单类型

// 目录、菜单、按钮等
🔍 查询相关枚举

QueryTypeEnum - 查询类型

// 精确查询、模糊查询、范围查询等

RequestTypeEnum - HTTP请求类型

// GET、POST、PUT、DELETE等

SordEnum - 排序枚举

// 升序(ASC)、降序(DESC)
🏢 系统状态枚举

StatusEnum - 公共状态

// 启用、禁用、待审核等

TenantTypeEnum - 租户类型

// 平台租户、企业租户、个人租户等

YesOrNot - 是/否布尔枚举

// Yes = 1, No = 0

4. 核心接口定义

👤 用户上下文接口

ICurrentUser - 基础用户上下文

public interface ICurrentUser
{
    long UserId { get; }                  // 用户ID
    string Account { get; }               // 账号
    string Name { get; }                  // 姓名
    bool IsAdmin { get; }                 // 是否管理员
    bool IsSuperAdmin { get; }            // 是否超级管理员
    long? TenantId { get; }               // 租户ID
    // 其他用户信息获取方法...
}

ICurrentUser<TT> - 泛型用户上下文

public interface ICurrentUser<TT> : ICurrentUser
{
    // 支持特定类型的扩展用户信息
}
📦 统一返回接口

IRESTfulResult - RESTful结果接口

public interface IRESTfulResult
{
    int Code { get; set; }                // 状态码
    string Message { get; set; }          // 消息
    bool Success { get; }                 // 是否成功
}

5. 数据模型实体

📄 分页参数模型

PageParam - 基础分页参数

public class PageParam
{
    public int PageIndex { get; set; }    // 页码
    public int PageSize { get; set; }     // 页大小
    public string SortField { get; set; } // 排序字段
    public string SortOrder { get; set; } // 排序方式
}

PageParam<T> - 泛型分页参数

public class PageParam<T> : PageParam
{
    public T Search { get; set; }         // 查询条件
}

Pagination - 分页参数(备用)

// 提供另一种分页参数实现
📊 分页返回模型

PageResult<T> - 分页返回结果

public class PageResult<T>
{
    public int TotalCount { get; set; }   // 总记录数
    public List<T> Data { get; set; }     // 数据列表
    public int PageIndex { get; set; }    // 当前页码
    public int PageSize { get; set; }     // 页大小
    public int TotalPages { get; }        // 总页数(计算属性)
}
✅ 统一响应模型

RestfulResult - 基础RESTful响应

public class RestfulResult : IRESTfulResult
{
    public int Code { get; set; }         // 状态码
    public string Message { get; set; }   // 消息
    public bool Success => Code == 0;     // 成功状态
    public DateTime Timestamp { get; set; } = DateTime.Now; // 时间戳
}

RestfulResult<T> - 泛型RESTful响应

public class RestfulResult<T> : RestfulResult
{
    public T Data { get; set; }           // 响应数据
}

🚀 使用示例

1. 实体类实现

public class User : IDataEntity, ITenantEntity
{
    // IPrimaryKeyEntity
    public long Id { get; set; }
    
    // IAuditableEntity
    public DateTime? CreateTime { get; set; }
    public long? Creator { get; set; }
    public DateTime? ModifyTime { get; set; }
    public long? Modifier { get; set; }
    
    // IDeletedEntity
    public IsDelete? IsDelete { get; set; }
    
    // ITenantEntity
    public long? TenantId { get; set; }
    
    // 业务字段
    public string Name { get; set; }
    public string Account { get; set; }
    public Gender Gender { get; set; }
    public StatusEnum Status { get; set; }
}

2. 服务层使用

public class UserService
{
    private readonly ICurrentUser _currentUser;
    
    public UserService(ICurrentUser currentUser)
    {
        _currentUser = currentUser;
    }
    
    public RestfulResult<PageResult<User>> GetUsers(PageParam<UserSearch> param)
    {
        // 使用统一返回格式
        return new RestfulResult<PageResult<User>> 
        {
            Code = 0,
            Message = "查询成功",
            Data = new PageResult<User>
            {
                TotalCount = 100,
                Data = userList,
                PageIndex = param.PageIndex,
                PageSize = param.PageSize
            }
        };
    }
}

🎯 设计优势

  1. 标准化:统一的数据传输对象规范
  2. 可扩展:基于接口的设计,易于扩展
  3. 多租户支持:内置租户隔离机制
  4. 审计追踪:自动记录数据操作痕迹
  5. 逻辑删除:数据安全删除机制
  6. 统一响应:标准化的API响应格式
  7. 分页标准化:统一的分页查询规范

这个组件为整个系统提供了坚实的数据传输基础架构,确保各个模块之间的数据交互保持一致性和规范性。

缓存机制

该库使用了线程安全的 ConcurrentDictionary 来缓存频繁访问的数据,包括:

  • 枚举项列表
  • 枚举字典
  • 枚举类型信息
  • 常量特性数据

缓存会在第一次调用相关方法时自动生成,并在后续调用中直接返回缓存数据,避免了重复的反射操作,提高了性能。

构建项目

依赖项还原

dotnet restore

编译项目

dotnet build

支持的框架

  • netcoreapp8.0

项目结构

RuoVea.ExDto/
├── Enum/                    # 枚举定义目录
│   ├── AdminType.cs         # 账号类型枚举
│   ├── BusinessType.cs      # 业务类型枚举
│   ├── CategoryEnum.cs      # 分类枚举
│   └── ...
├── Const/                   # 常量定义目录
│   └── ClaimConst.cs        # 用户登录常量
├── Util/                    # 工具类目录
│   ├── EnumManager.cs       # 枚举管理类
│   └── DisplayInfo.cs       # 元数据存储类
└── RuoVea.ExDto.csproj      # 项目文件

贡献

欢迎提交 Issue 和 Pull Request!

许可证

MIT License

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net9.0

    • No dependencies.

NuGet packages (7)

Showing the top 5 NuGet packages that depend on RuoVea.ExDto:

Package Downloads
RuoVea.ExSugar

Sqlsugar扩展 快速注入,支持简体中文、繁体中文、粤语、日语、法语、英语.使用方式:service.AddSqlsugar();继承RestFulLog 重写异常日志,操作日志,差异日志

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.ExJwtBearer

Jwt 授权验证拓展插件。声名:IJwtHelper _jwtHelper,支持简体中文、繁体中文、粤语、日语、法语、英语.添加验权:services.AddAuthenticationSetup(enableGlobalAuthorize: true);添加鉴权:services.AddAuthorizationSetup.MyPermission.(enableGlobalAuthorize: true);添加Jwt加密:services.AddJwtSetup();

RuoVea.ExWeb

CorsUrls、IPLimit、SafeIps、Jwt 配置

RuoVea.ExGlobal

web 注入 全局错误日志、操作日志记录

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
10.0.0.4 2,534 6/24/2026
10.0.0.3 1,132 1/26/2026
10.0.0.2 200 1/12/2026
9.0.0.4 1,374 1/26/2026
9.0.0.3 440 10/23/2025
9.0.0.2 283 10/23/2025
8.0.1.6 4,511 6/24/2026
8.0.1.5 2,689 1/26/2026
8.0.1.4 3,558 10/23/2025
8.0.1.3 285 10/23/2025
7.0.1.5 2,491 1/26/2026
7.0.1.4 4,140 10/23/2025
6.0.12.5 3,010 1/26/2026
6.0.12.4 5,247 10/23/2025
5.0.16.5 511 1/26/2026
5.0.16.4 500 10/23/2025
2.1.1.5 155 1/26/2026
2.1.1.4 274 10/23/2025
2.0.0.5 144 1/26/2026
2.0.0.4 286 10/23/2025
Loading failed