image.png
0. 前言
副标题:无价值人生记录.0:浪费 1000% 时间去做一个用来节省 1% 时间的“轮子玩具”(下:AOP实践2 Source Generators)
上接:用 Roslyn 做个 JIT 的 AOP
作为第二篇,我们基于Source Generators做个AOP静态编织小实验。
内容安排如下:
- source generators 是什么?
- 做个达到上篇Jit 一样的效果的demo
- source generators还存在什么问题?
1. Source Generators 是什么?
1.1 核心目的
开启dotnet平台的编译时元编程功能,
让我们能在编译时期动态创建代码,
同时考虑IDE的集成,让体验更舒适。
展开我们思想的翅膀
我们能以此做各种事情:
- 生成实体json 等序列化器代码
- AOP
- 接口定义生成httpclient调用代码
- 等等
如下是官方认为会受益的部分功能列表:
- ASP.Net: Improve startup time
- Blazor and Razor: Massively reduce tooling burden
- Azure Functions: regex compilation during startup
- Azure SDK
- gRPC
- Resx file generation
- System.CommandLine
- Serializers
- SWIG
1.2 目前其设计和使用准则
- 允许开发者能在编译时动态创建添加新代码到我们程序里面
- 只能新增代码,不能修改已有代码
- 当无法生成源时,生成器应当产生诊断信息,通知用户问题所在。
- 可能访问其他文件非c#源代码文件。
- 无序运行模式,每个生成器都只能拥有相同的输入编译,即不能用其他生成器的生成结果进行再次生成。
- 生成器的运行类似于分析器。
2. 实验:代理模式的静态编织
2.1 创建一个Source Generators项目
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>8.0</L