c#用特性实现aop_基于 Source Generators 做个 AOP 静态编织小实验

本文介绍了如何使用Source Generators在C#中实现AOP的静态编织,通过创建一个Source Generators项目并实现代码生成,展示了其在编译时元编程的应用,如生成序列化代码、接口调用等。同时也指出了Source Generators目前存在的限制,如不能引入NuGet包、无法查看生成结果等。
摘要由CSDN通过智能技术生成

11a740a055da584ff581a6745eb54eee.png


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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值