生产项目里接入 RabbitMQ 最烦的是每次发消息前都要写一长串 ExchangeDeclare + QueueDeclare + QueueBind 模板代码。本文从 SwitchData 项目源码中拆解一套声明式封装:用 [RabbitMqQueue] 特性标注消息模型类,用 ConcurrentDictionary 做拓扑缓存和反射缓存,用 SemaphoreSlim 做异步锁延迟创建单例连接,用泛型 SendMessageAsync<T> 让调用方只需要传消息对象本身。附带死信队列自动声明、延迟消息插件支持、手动 ACK/NACK 异常兜底、AutomaticRecoveryEnabled 自动重连等生产级能力,整个客户端不到 400 行却把 RabbitMQ.Client 裸 API 包装成了'一行代码发消息'的干净调用。
标签: #依赖注入
手写 ORM 或数据库抽象层时,缓存是性能关键。本文从 SwitchData 项目提取一套生产级缓存方案:用 record struct 做零 GC 组合键,ConcurrentDictionary 做线程安全容器,CacheKey 包含 ConnectionString 防止串库,命中缓存时必须 Clone 可变对象(DbParameter、DataTable、List)避免被业务代码污染。四句话总结一套可直接抄过去的 ORM 缓存基础设施。
Web API 有基类+多子类的继承体系(如 ReviewBase 派生 Excel/TXT/Database 三种导入请求),Swagger 默认只展示基类导致前端看不到子类字段。本文介绍用 System.Text.Json 的 JsonPolymorphic + JsonDerivedType 特性让运行时支持多态,再配合 Swashbuckle 的 UseOneOfForPolymorphism 自动生成 OpenAPI oneOf Schema,以及手动 DocumentFilter 和自定义 OperationFilter 两种备用方案,让 Swagger UI 直接展示子类下拉选择。
AsyncLocal<T> 是 .NET 异步编程中被低估的基础设施。本文通过 SwitchData 项目的完整实战,展示如何用 AsyncLocal 在请求管道中自动传递用户上下文,解释它与 ThreadLocal、ExecutionContext 的关系,并总结常见坑点与最佳实践。
本文基于 SwitchData 项目的实际代码,完整展示 ASP.NET Core 过滤器(Filter)体系的工程实践:用 IAsyncActionFilter 实现接口操作日志(反射读取 DisplayAttribute、敏感参数脱敏、Fire-and-forget 异步写库),用 NoPermissionAttribute + PermissionAttribute 双层拦截实现权限管控,以及通过自定义 IFilterProvider 动态注入过滤器。适合希望深入理解 ASP.NET Core 管道模型的开发者。
显式接口实现是 C# 中一个常被忽视但极其有用的特性。本文基于 SwitchData 项目中的真实代码,通过泛型接口桥接、双 Dispose 模式、多接口共存三大实战场景,深入讲解这个特性的核心价值与应用边界,让你在遇到同名接口冲突时能优雅化解。
本文基于 SwitchData 项目源码,从零实现一个完整的 Telnet 协议客户端。涵盖协议状态机设计、IAC/DO/DONT/WILL/WONT 四命令协商、子协商机制、业务数据与协议控制分离解析、粘包/半包处理、UTF-8 多字节跨包解码、IAC 转义等核心技术要点。
本文从 SwitchData 项目源码出发,手把手拆解一个约 2000 行代码的手写轻量级 ORM 框架。核心组件包括 Database 抽象基类(Provider 模式 + 模板方法)、MetadataCache 元数据驱动(反射扫描 + 表达式树编译高性能 Getter/Setter)、ObjectMapper 对象映射、SqlDatabase 泛型 CRUD,以及 ParameterCache、SchemaCache、MetadataCache 三级缓存机制。
基于 SwitchData 项目真实代码,讲解如何用 Hangfire 做后台任务调度,用工厂+策略模式让每种任务独立实现,用幂等性 Key 和 CAS 状态机防重复执行,用 BackgroundService 在 Worker 启动时一次性把数据库任务同步到 Hangfire。从配置、调度封装、策略接口、工厂注册到执行记录持久化,完整实现一条可扩展的后台任务链路。
本文结合 SwitchData 项目中的 ExpressionParser 实现,介绍如何通过 C# 表达式树把强类型的 LINQ Where 表达式解析成结构化查询条件,实现安全的动态 SQL 生成。
1 / 2
下一页