源生成器:提高应用程序性能的利器
扫描二维码随身看资讯
使用手机 二维码应用 扫描右侧二维码,您可以
1. 在手机上细细品读~
2. 分享给您的微信好友或朋友圈~
源生成器的好处很多。通过在编译时生成代码,可以减少运行时的反射和动态代码生成,从而提高应用程序的性能。有时候需要对程序进行AOT以及裁剪编译的dll也是需要用SG来处理的。
在开发程序时,Mapper对象映射是不可或缺的。常用的库可能包括AutoMapper、Maspter等第三方库。这些库功能强大,但由于内部实现存在反射,因此开发的程序就没办法进行AOT。因此,如果程序不是很复杂但又有很特殊的需求,建议使用SG来实现Mapper。
功能演示
这里我演示下自己开发的AutoDto生成DTO功能:
比如我们有一个User的类,需要生成UserDto。
public class User
{
public string Id { get; set; } = null!;
public string FirstName { get; set; } = null!;
public string LastName { get; set; } = null!;
public int? Age { get; set; }
public string? FullName => $"{FirstName} {LastName}";
}
定义UserDto并标注特性:
[AutoDto<User>(nameof(User.Id))]//这里我们假设排除Id属性
public partial record UserDto;
就这样,源生成器将自动为我们生成对应的Dto:
partial record class UserDto
{
/// <inheritdoc cref = "User.FirstName"/>
public string FirstName { get; set; }
/// <inheritdoc cref = "User.LastName"/>
public string LastName { get; set; }
/// <inheritdoc cref = "User.Age"/>
public int? Age { get; set; }
}
并同时为我们生成一个简单的Mapper扩展方法:
public static partial class UsertouserDtoExtentions
{
/// <summary>
/// mapper to UserDto
/// </summary>
/// <returns></returns>
public static UserDto MapperToUserDto(this User model)
{
return new UserDto()
{
FirstName = model.FirstName,
LastName = model.LastName,
Age = model.Age,
FullName = model.FullName,
};
}
}
实现代码
static void GENDTO(Compilation compilation, ImmutableArray<SyntaxNode> nodes, SourceProductionContext context)
如果你对完整的实现感兴趣可以移步我的GitHub仓储,欢迎star https://github.com/vipwan/Biwen.AutoClassGen
以上代码就完成了整个源生成步骤,最后你可以使用我发布的nuget包体验:
<ItemGroup>
<PackageReference Include="Biwen.AutoClassGen.Attributes" Version="1.3.6" />
<PackageReference Include="Biwen.AutoClassGen" Version="1.5.2" PrivateAssets="all" />
</ItemGroup>
最后,你可以使用我发布的nuget包体验。当然,如果你对完整的实现感兴趣可以移步我的GitHub仓储,欢迎star https://github.com/vipwan/Biwen.AutoClassGen
- 1
地铁跑酷主播同款直充版下载 v5.04.0 安卓版
- 2
新麻将连连看 消消乐
- 3
托卡3D版全部版中文版下载 v2.2.2 安卓版
- 4
天天酷跑3d单机游戏
- 5
植物大战僵尸杂交版 安卓正版
- 6
茶香世家
- 7
植物大战僵尸杂交版 最新免费下载
- 8
人类游乐场 安卓免费版
- 9
猎鱼达人VIVO版本下载 v3.7.0.0 安卓版
- 10
植物大战僵尸幼儿园版 安卓官方版
- 1
加查之花 正版
- 2
爪女孩 最新版
- 3
捕鱼大世界 无限金币版
- 4
企鹅岛 官方正版中文版
- 5
内蒙打大a真人版
- 6
跳跃之王手游
- 7
情商天花板 2024最新版
- 8
烦人的村民 手机版
- 9
球球英雄 手游
- 10
大富翁go 官网版