@@ -15,7 +15,7 @@ namespace ApiCodeGenerator.OpenApi.Refit
15
15
/// <summary>
16
16
/// Реализует логику генерации кода клиента Service Registry по документу OpenApi.
17
17
/// </summary>
18
- public class RefitCodeGenerator : CSharpClientGenerator
18
+ public class RefitCodeGenerator : CSharpGeneratorBase
19
19
{
20
20
private readonly RefitCodeGeneratorSettings _settings ;
21
21
@@ -29,15 +29,20 @@ public RefitCodeGenerator(OpenApiDocument openApiDocument, RefitCodeGeneratorSet
29
29
: base ( Cleanup ( openApiDocument , settings ) , settings , resolver )
30
30
{
31
31
OpenApiDocument = openApiDocument ;
32
+ BaseSettings = settings ;
32
33
_settings = settings ;
33
34
_settings . CSharpGeneratorSettings . ExcludedTypeNames = [ "FileParameter" , .. _settings . CSharpGeneratorSettings . ExcludedTypeNames ] ;
35
+ SetUsages ( ) ;
34
36
}
35
37
36
38
internal RefitCodeGenerator ( OpenApiDocument openApiDocument , RefitCodeGeneratorSettings settings )
37
39
: this ( openApiDocument , settings , CreateResolverWithExceptionSchema ( settings . CSharpGeneratorSettings , openApiDocument ) )
38
40
{
39
41
}
40
42
43
+ /// <inheritdoc/>
44
+ public override ClientGeneratorBaseSettings BaseSettings { get ; }
45
+
41
46
/// <summary>
42
47
/// OpenApi документ.
43
48
/// </summary>
@@ -50,7 +55,7 @@ protected override IEnumerable<CodeArtifact> GenerateClientTypes(string controll
50
55
if ( model . HasOperations && model . GenerateClientInterfaces )
51
56
{
52
57
model . InitWrappedQueryParameters ( ) ;
53
- var template = Settings . CSharpGeneratorSettings . TemplateFactory . CreateTemplate ( "CSharp" , "Client.Interface" , model ) ;
58
+ var template = _settings . CSharpGeneratorSettings . TemplateFactory . CreateTemplate ( "CSharp" , "Client.Interface" , model ) ;
54
59
yield return new CodeArtifact ( model . InterfaceName , CodeArtifactType . Interface , CodeArtifactLanguage . CSharp , CodeArtifactCategory . Contract , template ) ;
55
60
}
56
61
}
@@ -64,22 +69,13 @@ protected override IEnumerable<CodeArtifact> GenerateClientTypes(string controll
64
69
/// <returns>Модель кода интерфейса.</returns>
65
70
protected virtual RefitClientTemplateModel CreateTemplateModel ( string controllerName , string controllerClassName , IEnumerable < CSharpOperationModel > operations )
66
71
{
67
- return new RefitClientTemplateModel ( controllerName , controllerClassName , ( RefitCodeGeneratorSettings ) Settings , operations ) ;
72
+ return new RefitClientTemplateModel ( controllerName , controllerClassName , _settings , operations ) ;
68
73
}
69
74
70
75
/// <inheritdoc />
71
76
protected override CSharpOperationModel CreateOperationModel ( OpenApiOperation operation , ClientGeneratorBaseSettings settings )
72
77
{
73
- return new RefitOperationModel ( operation , ( RefitCodeGeneratorSettings ) Settings , this , ( CSharpTypeResolver ) Resolver ) ;
74
- }
75
-
76
- /// <inheritdoc />
77
- protected override string GenerateFile ( IEnumerable < CodeArtifact > clientTypes , IEnumerable < CodeArtifact > dtoTypes , ClientGeneratorOutputType outputType )
78
- {
79
- // Перегружаем метод, для задания новой модели, т.к. в стандартной модели если нет флага генерации класса клиента, то интерфейс не генерируется
80
- var model = CreateFileTemplateModel ( clientTypes , dtoTypes , outputType ) ;
81
- var template = _settings . CodeGeneratorSettings . TemplateFactory . CreateTemplate ( "CSharp" , "File" , model ) ;
82
- return template . Render ( ) ;
78
+ return new RefitOperationModel ( operation , _settings , this , ( CSharpTypeResolver ) Resolver ) ;
83
79
}
84
80
85
81
/// <summary>
@@ -90,24 +86,19 @@ protected override string GenerateFile(IEnumerable<CodeArtifact> clientTypes, IE
90
86
/// <param name="outputType">Типов вывода.</param>
91
87
/// <returns>Возвращает экземпляр модели.</returns>
92
88
protected virtual CSharpFileTemplateModel CreateFileTemplateModel ( IEnumerable < CodeArtifact > clientTypes , IEnumerable < CodeArtifact > dtoTypes , ClientGeneratorOutputType outputType )
93
- {
94
- var usages = GetUsages ( ) ;
95
- if ( outputType == ClientGeneratorOutputType . Contracts )
96
- {
97
- _settings . AdditionalContractNamespaceUsages = _settings . AdditionalContractNamespaceUsages . Union ( usages ) . ToArray ( ) ;
98
- }
99
- else
100
- {
101
- _settings . AdditionalNamespaceUsages = _settings . AdditionalNamespaceUsages . Union ( usages ) . ToArray ( ) ;
102
- }
103
-
104
- return new CSharpFileTemplateModel ( clientTypes , dtoTypes , outputType , OpenApiDocument , _settings , this , ( CSharpTypeResolver ) Resolver ) ;
105
- }
89
+ => new CSharpFileTemplateModel ( clientTypes , dtoTypes , outputType , OpenApiDocument , _settings , this , ( CSharpTypeResolver ) Resolver ) ;
106
90
107
91
/// <summary> Перечень пространств имен, которые требуется включить в вывод. </summary>
108
92
/// <returns> Массив пространств имен. </returns>
109
93
protected virtual IEnumerable < string > GetUsages ( )
110
- => new [ ] { "Refit" } ;
94
+ => [ "Refit" ] ;
95
+
96
+ protected void SetUsages ( )
97
+ {
98
+ var usages = GetUsages ( ) ;
99
+ _settings . AdditionalContractNamespaceUsages = [ .. _settings . AdditionalContractNamespaceUsages , .. usages ] ;
100
+ _settings . AdditionalNamespaceUsages = [ .. _settings . AdditionalNamespaceUsages , .. usages ] ;
101
+ }
111
102
112
103
private static OpenApiDocument Cleanup ( OpenApiDocument document , RefitCodeGeneratorSettings settings )
113
104
{
0 commit comments