如何无需依赖使用HanumanInstitute.Validators?Source Generator可行吗?有无更优方案?
解决方案:用Source Generator消除依赖同时降低维护成本
你不需要手动把文件转成字符串维护两个版本,有更简便的方式实现需求:
1. 共享源代码+双项目架构(推荐)
- 把所有验证工具方法的核心代码放到一个**共享项目(Shared Project)**里,这个项目只包含纯静态方法,无任何外部依赖。
- 搭建两个上层项目:
- 常规类库项目:引用共享项目,打包成普通NuGet包,供需要直接依赖的场景使用。
- Source Generator项目:同样引用共享项目,在Generator逻辑中读取共享项目的代码文件内容,编译时直接将代码注入调用方的程序集。
- 好处:只需要维护共享项目这一套代码,两个NuGet包的逻辑自动同步,完全避免重复维护。
2. 嵌入式代码模板+Source Generator
如果不想用共享项目,也可以:
- 将工具方法的代码保存为
.cs模板文件,作为嵌入式资源添加到Source Generator项目中。 - 在Source Generator的逻辑里,读取这些嵌入式资源的内容,直接生成到目标程序集。
- 这种方式不需要额外的共享项目,只需要维护一套模板代码,打包Source Generator NuGet时确保模板文件被嵌入即可。
3. NuGet包优化技巧
- 可以把常规版和Source Generator版打包成同一个NuGet包,通过条件编译符号让用户切换使用方式:比如用户定义
USE_SOURCE_GENERATED_VALIDATORS时,自动使用源码生成的方法,否则使用依赖库。 - 或者分开打包但保持版本号一致,方便用户根据场景选择安装对应版本。
关键注意事项
- 确保生成的代码是无依赖的纯静态方法,不要引用原库中的非基础类型,避免生成的代码仍需要依赖原库。
- 编写单元测试时,同时覆盖常规库和生成的代码,确保两者行为完全一致。
内容的提问来源于stack exchange,提问作者Etienne Charland
相关产品推荐
相关产品推荐

