elsa-workflows / elsa-workflows/elsa-core
AddElsaSwagger throws error if passing options already defined
- Dominant language
- C#
- Stars
- 7.9k
- Forks
- 1.5k
- Avg merge
- 15h 22m
- Merged PRs (30d)
- 114
Description
```
builder.Services
.AddElsa(elsa => elsa
.UseEntityFrameworkPersistence(o => o.UseSqlServer(elsaDbConn), true)
.AddUserTaskActivities()
.AddActivitiesFrom() // add our custom activities
)
.AddElsaSwagger(c => c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "Elsa",
Version = "v1"
}))
```
Since the extension methods already defines this value (see above), an exception is thrown when the Invoke method is called. Not sure what the most effective solution to this would be, at least some level of validation and xml documentation of the extension
```
public static IServiceCollection AddElsaSwagger(this IServiceCollection services, Action? configure = null)
{
Action configure2 = configure;
return services.AddSwaggerExamplesFromAssemblyOf().AddSwaggerGen(delegate (SwaggerGenOptions c)
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Title = "Elsa",
Version = "v1"
});
c.EnableAnnotations();
c.MapType(() => new OpenApiSchema
{
Type = PrimitiveType.String.ToString().ToLower(),
Example = new OpenApiString("Latest"),
Description = "Any of Latest, Published, Draft, LatestOrPublished or a specific version number.",
Nullable = true,
Default = new OpenApiString("Latest")
});
c.MapType(() => new OpenApiSchema
{
Type = PrimitiveType.String.ToString().ToLower(),
Example = new OpenApiString("System.String, mscorlib")
});
c.SchemaFilter(Array.Empty());
configure2?.Invoke(c);
});
```
```
at System.ThrowHelper.ThrowAddingDuplicateWithKeyArgumentException[T](T key)
at System.Collections.Generic.Dictionary`2.TryInsert(TKey key, TValue value, InsertionBehavior behavior)
at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
at Microsoft.Extensions.DependencyInjection.SwaggerGenOptionsExtensions.SwaggerDoc(SwaggerGenOptions swaggerGenOptions, String name, OpenApiInfo info)
at ElsaBookmarkTest.Program.<>c.b__0_1(SwaggerGenOptions c) in D:\github\ElsaSandbox\ElsaBookmarkTest\Program.cs:line 32
at Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.<>c__DisplayClass2_0.b__0(SwaggerGenOptions c)
at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
at Microsoft.Extensions.Options.UnnamedOptionsManager`1.get_Value()
at Swashbuckle.AspNetCore.SwaggerGen.ConfigureSwaggerGeneratorOptions..ctor(IOptions`1 swaggerGenOptionsAccessor, IServiceProvider serviceProvider, IWebHostEnvironment hostingEnv)
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.ConstructorInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr)
at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
...
```
Contributor guide
Assessment
This issue has not been assessed yet.