diff --git a/src/Swashbuckle.AspNetCore.SwaggerGen/SchemaGenerator/SchemaGenerator.cs b/src/Swashbuckle.AspNetCore.SwaggerGen/SchemaGenerator/SchemaGenerator.cs index 7d6c79ec1f..df18da4b45 100644 --- a/src/Swashbuckle.AspNetCore.SwaggerGen/SchemaGenerator/SchemaGenerator.cs +++ b/src/Swashbuckle.AspNetCore.SwaggerGen/SchemaGenerator/SchemaGenerator.cs @@ -10,9 +10,9 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ApiExplorer; +using Microsoft.Extensions.Options; using Microsoft.OpenApi.Any; using Microsoft.OpenApi.Models; -using Microsoft.Extensions.Options; namespace Swashbuckle.AspNetCore.SwaggerGen { @@ -20,21 +20,22 @@ public class SchemaGenerator : ISchemaGenerator { private readonly SchemaGeneratorOptions _generatorOptions; private readonly ISerializerDataContractResolver _serializerDataContractResolver; - private readonly IOptions _mvcOptions; - public SchemaGenerator(SchemaGeneratorOptions generatorOptions, ISerializerDataContractResolver serializerDataContractResolver) - : this(generatorOptions, serializerDataContractResolver, null) + public SchemaGenerator( + SchemaGeneratorOptions generatorOptions, + ISerializerDataContractResolver serializerDataContractResolver) { + _generatorOptions = generatorOptions; + _serializerDataContractResolver = serializerDataContractResolver; } + [Obsolete($"{nameof(IOptions)} is no longer used. This constructor will be removed in a future major release.")] public SchemaGenerator( SchemaGeneratorOptions generatorOptions, ISerializerDataContractResolver serializerDataContractResolver, IOptions mvcOptions) + : this(generatorOptions, serializerDataContractResolver) { - _generatorOptions = generatorOptions; - _serializerDataContractResolver = serializerDataContractResolver; - _mvcOptions = mvcOptions; } public OpenApiSchema GenerateSchema( @@ -440,9 +441,6 @@ private OpenApiSchema CreateObjectSchema(DataContract dataContract, SchemaReposi : GenerateSchemaForType(dataProperty.MemberType, schemaRepository); var markNonNullableTypeAsRequired = _generatorOptions.NonNullableReferenceTypesAsRequired -#if !NETSTANDARD2_0 - && (!_mvcOptions?.Value.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes ?? true) -#endif && (dataProperty.MemberInfo?.IsNonNullableReferenceType() ?? false); if (( diff --git a/test/Swashbuckle.AspNetCore.Annotations.Test/AnnotationsOperationFilterTests.cs b/test/Swashbuckle.AspNetCore.Annotations.Test/AnnotationsOperationFilterTests.cs index 2e71d29135..cee1575558 100644 --- a/test/Swashbuckle.AspNetCore.Annotations.Test/AnnotationsOperationFilterTests.cs +++ b/test/Swashbuckle.AspNetCore.Annotations.Test/AnnotationsOperationFilterTests.cs @@ -77,7 +77,7 @@ public void Apply_EnrichesResponseMetadata_IfActionDecoratedWithSwaggerResponseC .GetMethod(nameof(FakeControllerWithSwaggerAnnotations.ActionWithSwaggerResponseContentTypesAttributes)); var filterContext = new OperationFilterContext( apiDescription: null, - schemaRegistry: new SchemaGenerator(new SchemaGeneratorOptions(), new JsonSerializerDataContractResolver(new JsonSerializerOptions()), Options.Create(new MvcOptions())), + schemaRegistry: new SchemaGenerator(new SchemaGeneratorOptions(), new JsonSerializerDataContractResolver(new JsonSerializerOptions())), schemaRepository: new SchemaRepository(), methodInfo: methodInfo); diff --git a/test/Swashbuckle.AspNetCore.Newtonsoft.Test/SchemaGenerator/NewtonsoftSchemaGeneratorTests.cs b/test/Swashbuckle.AspNetCore.Newtonsoft.Test/SchemaGenerator/NewtonsoftSchemaGeneratorTests.cs index c726decdd0..015a8046b1 100644 --- a/test/Swashbuckle.AspNetCore.Newtonsoft.Test/SchemaGenerator/NewtonsoftSchemaGeneratorTests.cs +++ b/test/Swashbuckle.AspNetCore.Newtonsoft.Test/SchemaGenerator/NewtonsoftSchemaGeneratorTests.cs @@ -925,7 +925,7 @@ private static SchemaGenerator Subject( var serializerSettings = new JsonSerializerSettings(); configureSerializer?.Invoke(serializerSettings); - return new SchemaGenerator(generatorOptions, new NewtonsoftDataContractResolver(serializerSettings), Options.Create(new MvcOptions())); + return new SchemaGenerator(generatorOptions, new NewtonsoftDataContractResolver(serializerSettings)); } } } diff --git a/test/Swashbuckle.AspNetCore.SwaggerGen.Test/SchemaGenerator/JsonSerializerSchemaGeneratorTests.cs b/test/Swashbuckle.AspNetCore.SwaggerGen.Test/SchemaGenerator/JsonSerializerSchemaGeneratorTests.cs index ebd1f0d895..91b0f9f02d 100644 --- a/test/Swashbuckle.AspNetCore.SwaggerGen.Test/SchemaGenerator/JsonSerializerSchemaGeneratorTests.cs +++ b/test/Swashbuckle.AspNetCore.SwaggerGen.Test/SchemaGenerator/JsonSerializerSchemaGeneratorTests.cs @@ -984,6 +984,7 @@ public void GenerateSchema_SupportsOption_NonNullableReferenceTypesAsRequired_Re Assert.Equal(required, propertyIsRequired); } + [Obsolete($"{nameof(IOptions)} is not used.")] [Theory] [InlineData(typeof(TypeWithNullableContextAnnotated), nameof(TypeWithNullableContextAnnotated.SubTypeWithOneNonNullableContent), nameof(TypeWithNullableContextAnnotated.NonNullableString), false)] [InlineData(typeof(TypeWithNullableContextAnnotated), nameof(TypeWithNullableContextAnnotated.SubTypeWithOneNonNullableContent), nameof(TypeWithNullableContextAnnotated.NonNullableString), true)] @@ -1004,7 +1005,7 @@ public void GenerateSchema_SupportsOption_SuppressImplicitRequiredAttributeForNo subject.GenerateSchema(declaringType, schemaRepository); var propertyIsRequired = schemaRepository.Schemas[subType].Required.Contains(propertyName); - Assert.Equal(!suppress, propertyIsRequired); + Assert.True(propertyIsRequired); } [Theory] @@ -1318,8 +1319,7 @@ public void GenerateSchema_GeneratesSchema_IfParameterHasTypeConstraints() private static SchemaGenerator Subject( Action configureGenerator = null, - Action configureSerializer = null, - Action configureMvcOptions = null) + Action configureSerializer = null) { var generatorOptions = new SchemaGeneratorOptions(); configureGenerator?.Invoke(generatorOptions); @@ -1327,10 +1327,23 @@ private static SchemaGenerator Subject( var serializerOptions = new JsonSerializerOptions(); configureSerializer?.Invoke(serializerOptions); + return new SchemaGenerator(generatorOptions, new JsonSerializerDataContractResolver(serializerOptions)); + } + + [Obsolete($"{nameof(IOptions)} is not used.")] + private static SchemaGenerator Subject( + Action configureGenerator, + Action configureMvcOptions) + { + var generatorOptions = new SchemaGeneratorOptions(); + configureGenerator?.Invoke(generatorOptions); + + var serializerOptions = new JsonSerializerOptions(); + var mvcOptions = new MvcOptions(); configureMvcOptions?.Invoke(mvcOptions); - return new SchemaGenerator(generatorOptions, new JsonSerializerDataContractResolver(serializerOptions), Options.Create(mvcOptions)); + return new SchemaGenerator(generatorOptions, new JsonSerializerDataContractResolver(serializerOptions), Options.Create(mvcOptions)); } } } diff --git a/test/Swashbuckle.AspNetCore.SwaggerGen.Test/SwaggerGenerator/SwaggerGeneratorTests.cs b/test/Swashbuckle.AspNetCore.SwaggerGen.Test/SwaggerGenerator/SwaggerGeneratorTests.cs index 2aab436d56..9631d56e31 100644 --- a/test/Swashbuckle.AspNetCore.SwaggerGen.Test/SwaggerGenerator/SwaggerGeneratorTests.cs +++ b/test/Swashbuckle.AspNetCore.SwaggerGen.Test/SwaggerGenerator/SwaggerGeneratorTests.cs @@ -2528,8 +2528,8 @@ private static SwaggerGenerator Subject( return new SwaggerGenerator( options ?? DefaultOptions, new FakeApiDescriptionGroupCollectionProvider(apiDescriptions), - new SchemaGenerator(new SchemaGeneratorOptions() { SchemaFilters = schemaFilters ?? [] }, new JsonSerializerDataContractResolver(new JsonSerializerOptions()), Options.Create(new MvcOptions())), - new FakeAuthenticationSchemeProvider(authenticationSchemes ?? Enumerable.Empty()) + new SchemaGenerator(new SchemaGeneratorOptions { SchemaFilters = schemaFilters ?? [] }, new JsonSerializerDataContractResolver(new JsonSerializerOptions())), + new FakeAuthenticationSchemeProvider(authenticationSchemes ?? []) ); }