11using Microsoft . CodeAnalysis ;
22using Microsoft . CodeAnalysis . Text ;
33using System . Collections . Generic ;
4- using System . Linq ;
54using System . Text ;
65
76namespace WebApiClientCore . Analyzers . SourceGenerator
@@ -11,8 +10,8 @@ sealed class DynamicDependencyBuilder
1110 private readonly Compilation compilation ;
1211 private readonly IEnumerable < HttpApiCodeBuilder > codeBuilders ;
1312
14- public string FileName => "WebApiClientBuilderExtensions .g.cs" ;
15- public string ClassName => "WebApiClientBuilderExtensions_G " ;
13+ public string FileName => "DynamicDependencyInitializer .g.cs" ;
14+ public string ClassName => "DynamicDependencyInitializer_G " ;
1615
1716 public DynamicDependencyBuilder ( Compilation compilation , IEnumerable < HttpApiCodeBuilder > codeBuilders )
1817 {
@@ -35,47 +34,33 @@ public override string ToString()
3534 var builder = new StringBuilder ( ) ;
3635 builder . AppendLine ( "#if NET5_0_OR_GREATER" ) ;
3736 builder . AppendLine ( "using System.Diagnostics.CodeAnalysis;" ) ;
38- builder . AppendLine ( "namespace Microsoft.Extensions.DependencyInjection" ) ;
37+ builder . AppendLine ( "using System.Runtime.CompilerServices;" ) ;
38+ builder . AppendLine ( $ "namespace WebApiClientCore") ;
3939 builder . AppendLine ( "{" ) ;
40- builder . AppendLine ( " /// <summary>IWebApiClientBuilder扩展 </summary>" ) ;
41- builder . AppendLine ( $ " public static partial class { this . ClassName } ") ;
40+ builder . AppendLine ( " /// <summary>动态依赖初始化器 </summary>" ) ;
41+ builder . AppendLine ( $ " static partial class { this . ClassName } ") ;
4242 builder . AppendLine ( " {" ) ;
4343
4444 builder . AppendLine ( $ """
4545 /// <summary>
4646 /// 注册程序集{ compilation . AssemblyName } 的所有动态依赖
4747 /// 避免程序集在裁剪时裁剪掉由SourceGenerator生成的代理类
4848 /// </summary>
49- /// <param name="builder"></param>
50- /// <returns></returns>
5149 """ ) ;
52-
53- var assemblyName = GetAssemblyName ( compilation ) ;
5450 foreach ( var codeBuilder in this . codeBuilders )
5551 {
5652 builder . AppendLine ( $ " [DynamicDependency(DynamicallyAccessedMemberTypes.All, typeof({ codeBuilder . Namespace } .{ codeBuilder . ClassName } ))]") ;
5753 }
58-
59- builder . AppendLine ( $ " public static IWebApiClientBuilder AddDynamicDependency{ assemblyName } (this IWebApiClientBuilder builder )") ;
54+ builder . AppendLine ( " [ModuleInitializer]" ) ;
55+ builder . AppendLine ( " public static void AddDynamicDependency( )" ) ;
6056 builder . AppendLine ( " {" ) ;
61- builder . AppendLine ( " return builder;" ) ;
6257 builder . AppendLine ( " }" ) ;
63-
58+
6459 builder . AppendLine ( " }" ) ;
6560 builder . AppendLine ( "}" ) ;
6661 builder . AppendLine ( "#endif" ) ;
6762 return builder . ToString ( ) ;
6863 }
6964
70- private static string GetAssemblyName ( Compilation compilation )
71- {
72- var assemblyName = compilation . AssemblyName ?? string . Empty ;
73- return new string ( assemblyName . Where ( IsAllowChar ) . ToArray ( ) ) ;
74-
75- static bool IsAllowChar ( char c )
76- {
77- return ( '0' <= c && c <= '9' ) || ( 'A' <= c && c <= 'Z' ) || ( 'a' <= c && c <= 'z' ) ;
78- }
79- }
8065 }
8166}
0 commit comments