RuoVea.ExDto 2.1.1.5

There is a newer version of this package available.
See the version list below for details.
dotnet add package RuoVea.ExDto --version 2.1.1.5
                    
NuGet\Install-Package RuoVea.ExDto -Version 2.1.1.5
                    
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="2.1.1.5" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="RuoVea.ExDto" Version="2.1.1.5" />
                    
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 2.1.1.5
                    
#r "nuget: RuoVea.ExDto, 2.1.1.5"
                    
#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@2.1.1.5
                    
#: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=2.1.1.5
                    
Install as a Cake Addin
#tool nuget:?package=RuoVea.ExDto&version=2.1.1.5
                    
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 Core netcoreapp2.1.30 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETCoreApp 2.1.30

    • 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