.NET SourceGenerator API接口生成实现类

Posted EdisonTalk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET SourceGenerator API接口生成实现类相关的知识,希望对你有一定的参考价值。

Identity a Interface which will be implemented by SourceGenerators: HttpClient name Name Create a new Create a new with given name name) Name = name; Identity a method send HTTP Get request: Creates a new with the given route template. template) : HTTP method abstract type for common encapsulation: Route template Template Creates a new with the given route template. template) Template = template; ... /> /> /> ... : List<INamedTypeSymbol> TypeSymbols List<INamedTypeSymbol>(); (context.Node InterfaceDeclarationSyntax ids && ids.AttributeLists.Count > typeSymbol = ModelExtensions.GetDeclaredSymbol(context.SemanticModel, ids) INamedTypeSymbol; (typeSymbol!.GetAttributes().Any(x => x.AttributeClass!.ToDisplayString() == TypeSymbols.Add(typeSymbol); httpClientName, requestUri) returnType = (methodSymbol.ReturnType INamedTypeSymbol).TypeArguments[ cancellationToken = methodSymbol.Parameters.Last().Name; source = GenerateHttpClient(typeSymbol, methodSymbol, httpClientName); source.AppendLine( source.AppendLine( source.AppendLine( source.AppendLine( source.ToString();extensionSource = StringBuilder( public static class ScanInjectOptions public static void AddGeneratedHttpClient(this IServiceCollection services) (typeSymbol receiver.TypeSymbols) ... extensionSource.AppendLine( extensionSource.AppendLine( extensionTextFormatted = CSharpSyntaxTree .ParseText(extensionSource.ToString(), CSharpParseOptions(LanguageVersion.CSharp8)).GetRoot() .NormalizeWhitespace().SyntaxTree.GetText().ToString(); context.AddSource( SourceText.From(extensionTextFormatted, Encoding.UTF8));: HashSet<INamedTypeSymbol> _httpClientTypeSymbols; _httpClientTypeSymbols = HashSet<INamedTypeSymbol>(SymbolEqualityComparer.Default); ImmutableArray<INamedTypeSymbol> => _httpClientTypeSymbols.ToImmutableArray(); symbol.GlobalNamespace.Accept( (namespaceOrTypeSymbol symbol.GetMembers()) namespaceOrTypeSymbol.Accept( (symbol.DeclaredAccessibility != Accessibility.Public) (symbol.GetAttributes().Any(x => x.AttributeClass!.ToDisplayString() == _httpClientTypeSymbols.Add(symbol); nestedTypes = symbol.GetMembers(); (nestedTypes.IsDefaultOrEmpty) (nestedType nestedTypes) nestedType.Accept( (!(context.SyntaxContextReceiver HttpClientSyntax receiver)) httpClientVisitor = HttpClientVisitor(); (assemblySymbol context.Compilation.SourceModule.ReferencedAssemblySymbols .Where(x => x.Identity.PublicKey == ImmutableArray< assemblySymbol.Accept(httpClientVisitor); receiver.TypeSymbols.AddRange(httpClientVisitor.GetHttpClientTypes()); ... [ id, CancellationToken cancellationToken = [ [ [ id, Todo todo, CancellationToken cancellationToken); [ id, CancellationToken cancellationToken); IJsonServerApi _jsonServerApi; _jsonServerApi = jsonServerApi; [ Task<Todo> id, CancellationToken cancellationToken) _jsonServerApi.Get(id, cancellationToken); ...

7 总结
Source generators 非常强(Powerful!!!),以一种现代化的,人类可读(human readable)的方式解决重复编码的问题,并且拥有与原生代码一致的性能,读者可以结合文章以及官方示例用 Source generators 来解决实际工作中的问题,任何建议和新功能需求也欢迎留言或在 Github 上提出。
源代码&Nuget包

SourceCode: https://github.com/huiyuanai709/SourceGeneratorPower 

Nuget Package: https://www.nuget.org/packages/SourceGeneratorPower.HttpClient.Abstractions 

Nuget Package: https://www.nuget.org/packages/SourceGeneratorPower.HttpClient.SourceGenerator


作  者:马福智(灰原哀)

审  稿:吴友强(技巅)

编  :周旭龙(爱迪生)

年终总结:Edison的2021年终总结
数字化转型:我在传统企业做数字化转型
C#刷题:C#刷剑指Offer算法题系列文章目录
.NET面试:.NET开发面试知识体系
.NET大会:2020年中国.NET开发者大会PDF资料

.NET性能优化-使用SourceGenerator-Logger记录日志

## 前言 在现在许许多多的应用系统中,日志非常关键,它即是排查问题的强力工具,也是程序员居家旅行工作甩锅必备良品。 在团队中编码中,我们都要求对于那些会变更数据的接口、调用第三方的接口记录请求和响应参数,另外在关键的代码路径记录后续可供诊断的日志信息。 如果使用了微软官方的日志记录框架Micro

以上是关于.NET SourceGenerator API接口生成实现类的主要内容,如果未能解决你的问题,请参考以下文章

.NET性能优化-使用SourceGenerator-Logger记录日志

.NET性能优化-使用SourceGenerator-Logger记录日志

Source Generator初探

C# 强大的新特性 Source Generator

.NET 6 中的 Logging Source Generator

net core体系-API-1Ocelot-项目实战