@@ -15,7 +15,7 @@ namespace ApiCodeGenerator.OpenApi.Refit
1515 /// <summary>
1616 /// Реализует логику генерации кода клиента Service Registry по документу OpenApi.
1717 /// </summary>
18- public class RefitCodeGenerator : CSharpClientGenerator
18+ public class RefitCodeGenerator : CSharpGeneratorBase
1919 {
2020 private readonly RefitCodeGeneratorSettings _settings ;
2121
@@ -29,15 +29,20 @@ public RefitCodeGenerator(OpenApiDocument openApiDocument, RefitCodeGeneratorSet
2929 : base ( Cleanup ( openApiDocument , settings ) , settings , resolver )
3030 {
3131 OpenApiDocument = openApiDocument ;
32+ BaseSettings = settings ;
3233 _settings = settings ;
3334 _settings . CSharpGeneratorSettings . ExcludedTypeNames = [ "FileParameter" , .. _settings . CSharpGeneratorSettings . ExcludedTypeNames ] ;
35+ SetUsages ( ) ;
3436 }
3537
3638 internal RefitCodeGenerator ( OpenApiDocument openApiDocument , RefitCodeGeneratorSettings settings )
3739 : this ( openApiDocument , settings , CreateResolverWithExceptionSchema ( settings . CSharpGeneratorSettings , openApiDocument ) )
3840 {
3941 }
4042
43+ /// <inheritdoc/>
44+ public override ClientGeneratorBaseSettings BaseSettings { get ; }
45+
4146 /// <summary>
4247 /// OpenApi документ.
4348 /// </summary>
@@ -50,7 +55,7 @@ protected override IEnumerable<CodeArtifact> GenerateClientTypes(string controll
5055 if ( model . HasOperations && model . GenerateClientInterfaces )
5156 {
5257 model . InitWrappedQueryParameters ( ) ;
53- var template = Settings . CSharpGeneratorSettings . TemplateFactory . CreateTemplate ( "CSharp" , "Client.Interface" , model ) ;
58+ var template = _settings . CSharpGeneratorSettings . TemplateFactory . CreateTemplate ( "CSharp" , "Client.Interface" , model ) ;
5459 yield return new CodeArtifact ( model . InterfaceName , CodeArtifactType . Interface , CodeArtifactLanguage . CSharp , CodeArtifactCategory . Contract , template ) ;
5560 }
5661 }
@@ -64,22 +69,13 @@ protected override IEnumerable<CodeArtifact> GenerateClientTypes(string controll
6469 /// <returns>Модель кода интерфейса.</returns>
6570 protected virtual RefitClientTemplateModel CreateTemplateModel ( string controllerName , string controllerClassName , IEnumerable < CSharpOperationModel > operations )
6671 {
67- return new RefitClientTemplateModel ( controllerName , controllerClassName , ( RefitCodeGeneratorSettings ) Settings , operations ) ;
72+ return new RefitClientTemplateModel ( controllerName , controllerClassName , _settings , operations ) ;
6873 }
6974
7075 /// <inheritdoc />
7176 protected override CSharpOperationModel CreateOperationModel ( OpenApiOperation operation , ClientGeneratorBaseSettings settings )
7277 {
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 ) ;
8379 }
8480
8581 /// <summary>
@@ -90,24 +86,19 @@ protected override string GenerateFile(IEnumerable<CodeArtifact> clientTypes, IE
9086 /// <param name="outputType">Типов вывода.</param>
9187 /// <returns>Возвращает экземпляр модели.</returns>
9288 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 ) ;
10690
10791 /// <summary> Перечень пространств имен, которые требуется включить в вывод. </summary>
10892 /// <returns> Массив пространств имен. </returns>
10993 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+ }
111102
112103 private static OpenApiDocument Cleanup ( OpenApiDocument document , RefitCodeGeneratorSettings settings )
113104 {
0 commit comments