阿Y博客

上辈子作恶多端,这辈子Chsarp后端
文章发布热力图
一 三 五
少
多
从零实现轻量级 ADO.NET ORM:特性驱动 + Expression Tree 委托 + 多级 ConcurrentDictionary 缓存完整架构

从零实现轻量级 ADO.NET ORM:特性驱动 + Expression Tree 委托 + 多级 ConcurrentDictionary 缓存完整架构

本文带你拆解一个生产环境真实在用的轻量级 ADO.NET ORM 框架。它基于特性驱动实体映射,用 Expression Tree 动态编译 Getter/Setter 委托实现零反射开销,并通过 MetadataCache、SchemaCache、CachingMechanism 三级 ConcurrentDictionary 缓存体系保证性能与线程安全。整个框架零外部依赖,代码量不过千行,却完整实现了 Dapper 的核心能力。
.NET 4 0 0
基于特性标注 + 泛型驱动的 RabbitMQ 客户端封装实战:把消息发送变成一行代码

基于特性标注 + 泛型驱动的 RabbitMQ 客户端封装实战:把消息发送变成一行代码

生产项目里接入 RabbitMQ 最烦的是每次发消息前都要写一长串 ExchangeDeclare + QueueDeclare + QueueBind 模板代码。本文从 SwitchData 项目源码中拆解一套声明式封装:用 [RabbitMqQueue] 特性标注消息模型类,用 ConcurrentDictionary 做拓扑缓存和反射缓存,用 SemaphoreSlim 做异步锁延迟创建单例连接,用泛型 SendMessageAsync<T> 让调用方只需要传消息对象本身。附带死信队列自动声明、延迟消息插件支持、手动 ACK/NACK 异常兜底、AutomaticRecoveryEnabled 自动重连等生产级能力,整个客户端不到 400 行却把 RabbitMQ.Client 裸 API 包装成了'一行代码发消息'的干净调用。
中间件 7 0 0
从零实现 C# Telnet 协议客户端:IAC 协商 + 子协商 + 终端类型握手完整实战

从零实现 C# Telnet 协议客户端:IAC 协商 + 子协商 + 终端类型握手完整实战

本文从真实项目代码出发,带你从零实现一个完整的 C# Telnet 协议客户端。我们会拆开 Telnet 协议的每一个字节——IAC 转义、DO/DONT/WILL/WONT 协商、SB/SE 子协商、终端类型(VT100)握手、窗口大小声明——然后用一个有限状态机把它们串起来,最后用 SemaphoreSlim 保证异步读写的线程安全。完整代码来自生产环境,已稳定跑了一年多。
教程 4 0 0
ConcurrentDictionary + record struct 组合键:.NET ORM 零分配缓存三层设计实战

ConcurrentDictionary + record struct 组合键:.NET ORM 零分配缓存三层设计实战

手写 ORM 或数据库抽象层时,缓存是性能关键。本文从 SwitchData 项目提取一套生产级缓存方案:用 record struct 做零 GC 组合键,ConcurrentDictionary 做线程安全容器,CacheKey 包含 ConnectionString 防止串库,命中缓存时必须 Clone 可变对象(DbParameter、DataTable、List)避免被业务代码污染。四句话总结一套可直接抄过去的 ORM 缓存基础设施。
.NET 6 0 0
Swagger 多态文档实战:JsonPolymorphic + Swashbuckle oneOf 让接口继承体系一目了然

Swagger 多态文档实战:JsonPolymorphic + Swashbuckle oneOf 让接口继承体系一目了然

Web API 有基类+多子类的继承体系(如 ReviewBase 派生 Excel/TXT/Database 三种导入请求),Swagger 默认只展示基类导致前端看不到子类字段。本文介绍用 System.Text.Json 的 JsonPolymorphic + JsonDerivedType 特性让运行时支持多态,再配合 Swashbuckle 的 UseOneOfForPolymorphism 自动生成 OpenAPI oneOf Schema,以及手动 DocumentFilter 和自定义 OperationFilter 两种备用方案,让 Swagger UI 直接展示子类下拉选择。
中间件 8 0 0