Skip to content

Commit 010c297

Browse files
Move transformer
Add type-based transformer for operations to its own class.
1 parent 84d5497 commit 010c297

File tree

4 files changed

+47
-25
lines changed

4 files changed

+47
-25
lines changed

src/OpenApi/src/Services/OpenApiOptions.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public OpenApiOptions AddDocumentTransformer(Func<OpenApiDocument, OpenApiDocume
104104
public OpenApiOptions AddOperationTransformer<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TTransformerType>()
105105
where TTransformerType : IOpenApiOperationTransformer
106106
{
107-
OperationTransformers.Add(new TypeBasedOpenApiDocumentTransformer(typeof(TTransformerType)));
107+
OperationTransformers.Add(new TypeBasedOpenApiOperationTransformer(typeof(TTransformerType)));
108108
return this;
109109
}
110110

src/OpenApi/src/Transformers/TypeBasedOpenApiDocumentTransformer.cs

+1-23
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace Microsoft.AspNetCore.OpenApi;
1010

11-
internal sealed class TypeBasedOpenApiDocumentTransformer : IOpenApiDocumentTransformer, IOpenApiOperationTransformer
11+
internal sealed class TypeBasedOpenApiDocumentTransformer : IOpenApiDocumentTransformer
1212
{
1313
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]
1414
private readonly Type _transformerType;
@@ -40,26 +40,4 @@ public async Task TransformAsync(OpenApiDocument document, OpenApiDocumentTransf
4040
}
4141
}
4242
}
43-
44-
public async Task TransformAsync(OpenApiOperation operation, OpenApiOperationTransformerContext context, CancellationToken cancellationToken)
45-
{
46-
var transformer = _transformerFactory.Invoke(context.ApplicationServices, []) as IOpenApiOperationTransformer;
47-
Debug.Assert(transformer is not null, $"The type {_transformerType} does not implement {nameof(IOpenApiOperationTransformer)}.");
48-
49-
try
50-
{
51-
await transformer.TransformAsync(operation, context, cancellationToken);
52-
}
53-
finally
54-
{
55-
if (transformer is IAsyncDisposable asyncDisposable)
56-
{
57-
await asyncDisposable.DisposeAsync();
58-
}
59-
else if (transformer is IDisposable disposable)
60-
{
61-
disposable.Dispose();
62-
}
63-
}
64-
}
6543
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using System.Diagnostics;
5+
using System.Diagnostics.CodeAnalysis;
6+
using Microsoft.Extensions.DependencyInjection;
7+
using Microsoft.OpenApi.Models;
8+
9+
namespace Microsoft.AspNetCore.OpenApi;
10+
11+
internal sealed class TypeBasedOpenApiOperationTransformer : IOpenApiOperationTransformer
12+
{
13+
[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)]
14+
private readonly Type _transformerType;
15+
private readonly ObjectFactory _transformerFactory;
16+
17+
internal TypeBasedOpenApiOperationTransformer([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type transformerType)
18+
{
19+
_transformerType = transformerType;
20+
_transformerFactory = ActivatorUtilities.CreateFactory(_transformerType, []);
21+
}
22+
23+
public async Task TransformAsync(OpenApiOperation operation, OpenApiOperationTransformerContext context, CancellationToken cancellationToken)
24+
{
25+
var transformer = _transformerFactory.Invoke(context.ApplicationServices, []) as IOpenApiOperationTransformer;
26+
Debug.Assert(transformer is not null, $"The type {_transformerType} does not implement {nameof(IOpenApiOperationTransformer)}.");
27+
28+
try
29+
{
30+
await transformer.TransformAsync(operation, context, cancellationToken);
31+
}
32+
finally
33+
{
34+
if (transformer is IAsyncDisposable asyncDisposable)
35+
{
36+
await asyncDisposable.DisposeAsync();
37+
}
38+
else if (transformer is IDisposable disposable)
39+
{
40+
disposable.Dispose();
41+
}
42+
}
43+
}
44+
}

src/OpenApi/test/Transformers/OpenApiOptionsTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ public void AddOperationTransformer_WithOperationTransformerType()
114114

115115
// Assert
116116
var insertedTransformer = Assert.Single(options.OperationTransformers);
117-
Assert.IsType<TypeBasedOpenApiDocumentTransformer>(insertedTransformer);
117+
Assert.IsType<TypeBasedOpenApiOperationTransformer>(insertedTransformer);
118118
Assert.IsType<OpenApiOptions>(result);
119119
Assert.Empty(options.DocumentTransformers);
120120
Assert.Empty(options.SchemaTransformers);

0 commit comments

Comments
 (0)