Skip to content

Commit 541c2bf

Browse files
author
Chris Young
committed
Merge tag '5.2.0' into develop
5.2.0 5.2.0
2 parents 2c35884 + 6ba98f6 commit 541c2bf

File tree

14 files changed

+209
-373
lines changed

14 files changed

+209
-373
lines changed

src/ArchitectNow.Mongo/Db/IMongoDBUtilities.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace ArchitectNow.Mongo.Db
66
public interface IMongoDbUtilities : IDisposable
77
{
88
IMongoDatabase Database { get; }
9-
string GetConnectionString();
10-
string GetDatabaseName();
9+
string DatabaseName { get; }
10+
string ConnectionString { get; }
1111
}
1212
}

src/ArchitectNow.Mongo/Db/MongoDBUtilities.cs

Lines changed: 18 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,46 @@
11
using System;
2-
using ArchitectNow.Mongo.Options;
3-
using Microsoft.Extensions.Options;
42
using MongoDB.Bson;
53
using MongoDB.Bson.Serialization.Conventions;
64
using MongoDB.Driver;
75

86
namespace ArchitectNow.Mongo.Db
97
{
10-
public class MongoDbUtilities : IMongoDbUtilities
8+
public abstract class MongoDbUtilities : IMongoDbUtilities
119
{
12-
private readonly MongoOptions _options;
13-
private readonly string _dbName;
10+
public string DatabaseName { get; }
11+
public string ConnectionString { get; }
1412
private bool _isDisposed;
1513
private readonly MongoClient _client;
1614

17-
public MongoDbUtilities(IOptions<MongoOptions> options )
15+
protected MongoDbUtilities(string connectionString, string databaseName)
1816
{
19-
_options = options.Value;
20-
var connectionString = GetConnectionString();
21-
17+
DatabaseName = databaseName;
18+
ConnectionString = connectionString;
19+
20+
DatabaseName = databaseName;
21+
ConnectionString = connectionString;
22+
2223
if (string.IsNullOrEmpty(connectionString))
2324
{
2425
throw new Exception("No DB connection found");
2526
}
26-
27+
28+
if (string.IsNullOrEmpty(databaseName))
29+
{
30+
throw new Exception("No database name found");
31+
}
32+
2733
var pack = new ConventionPack{
2834
new EnumRepresentationConvention(BsonType.String),
29-
new CamelCaseElementNameConvention()
35+
new CamelCaseElementNameConvention()
3036
};
3137

3238
ConventionRegistry.Register("AN Conventions", pack, t => true);
3339
MongoDefaults.MaxConnectionIdleTime = TimeSpan.FromMinutes(1);
34-
35-
_dbName = GetDatabaseName();
36-
37-
if (string.IsNullOrEmpty(_dbName))
38-
{
39-
throw new Exception("No database name found");
40-
}
41-
4240
_client = new MongoClient(connectionString);
4341
}
4442

45-
public void CreateCollection(string collectionName)
46-
{
47-
48-
}
49-
50-
public string GetConnectionString()
51-
{
52-
return _options.ConnectionString;
53-
}
54-
55-
public string GetDatabaseName()
56-
{
57-
return _options.DatabaseName;
58-
}
59-
60-
public IMongoDatabase Database => _client.GetDatabase(_dbName);
43+
public IMongoDatabase Database => _client.GetDatabase(DatabaseName);
6144

6245
public void Dispose()
6346
{

src/ArchitectNow.Mongo/MongoModule.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,6 @@ protected override void Load(ContainerBuilder builder)
1616
{
1717
builder.RegisterType<MongoDataContextService>().As<IDataContextService<MongoDataContext>>()
1818
.InstancePerLifetimeScope();
19-
20-
builder.RegisterType<MongoDbUtilities>().As<IMongoDbUtilities>()
21-
.SingleInstance();
2219

2320
builder.Register(context => context.Resolve<IConfiguration>().CreateOptions<MongoOptions>("mongo")).As<IOptions<MongoOptions>>().SingleInstance();
2421
}

src/ArchitectNow.Web.Mongo/StartupSample.cs

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using Microsoft.Extensions.DependencyInjection;
1717
using Microsoft.Extensions.Logging;
1818
using NJsonSchema;
19+
using NSwag.AspNetCore;
1920
using Serilog;
2021

2122
namespace ArchitectNow.Web.Mongo
@@ -50,27 +51,7 @@ public IServiceProvider ConfigureServices(IServiceCollection services)
5051

5152
//Register startup filters (order matters)
5253
services.AddTransient<IStartupFilter, AntiForgeryStartupFilter>();
53-
services.AddTransient<IStartupFilter, SwaggerV2StartupFilter>(serviceProvider =>
54-
{
55-
return new SwaggerV2StartupFilter( serviceProvider.GetService<ILogger<SwaggerV2StartupFilter>>(),
56-
new SwaggerOptionsV2
57-
{
58-
Version = "1.0",
59-
Title = "API",
60-
Description = "API",
61-
Name = "v1",
62-
SwaggerRoute = "/app/docs/v1/swagger.json",
63-
SwaggerUiRoute = "/app/docs",
64-
Configure = settings =>
65-
{
66-
settings.UseJsonEditor = false;
67-
settings.GeneratorSettings.DefaultEnumHandling = EnumHandling.String;
68-
settings.GeneratorSettings.DefaultPropertyNameHandling = PropertyNameHandling.CamelCase;
69-
settings.GeneratorSettings.Version = Assembly.GetEntryAssembly().GetName().Version.ToString();
70-
},
71-
});
72-
});
73-
54+
7455
//last
7556
services.AddTransient<IStartupFilter, HangfireStartupFilter>();
7657

@@ -109,6 +90,16 @@ public void Configure(
10990
_logger.LogInformation($"{nameof(Configure)} starting...");
11091

11192
//Add custom middleware or use IStartupFilter
93+
app.UseSwaggerUi3(settings =>
94+
{
95+
settings.GeneratorSettings.Title = "API";
96+
settings.GeneratorSettings.Description = "API";
97+
settings.SwaggerRoute = "/app/docs/v1/swagger.json";
98+
settings.SwaggerUiRoute = "/app/docs";
99+
settings.GeneratorSettings.DefaultEnumHandling = EnumHandling.String;
100+
settings.GeneratorSettings.DefaultPropertyNameHandling = PropertyNameHandling.CamelCase;
101+
settings.GeneratorSettings.Version = Assembly.GetEntryAssembly().GetName().Version.ToString();
102+
});
112103

113104
appLifetime.ApplicationStopped.Register(() =>
114105
{

src/ArchitectNow.Web.Redis/StartupSample.cs

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using Microsoft.Extensions.DependencyInjection;
1616
using Microsoft.Extensions.Logging;
1717
using NJsonSchema;
18+
using NSwag.AspNetCore;
1819
using Serilog;
1920

2021
namespace ArchitectNow.Web.Redis
@@ -49,27 +50,7 @@ public IServiceProvider ConfigureServices(IServiceCollection services)
4950

5051
//Register startup filters (order matters)
5152
services.AddTransient<IStartupFilter, AntiForgeryStartupFilter>();
52-
services.AddTransient<IStartupFilter, SwaggerV2StartupFilter>(serviceProvider =>
53-
{
54-
return new SwaggerV2StartupFilter( serviceProvider.GetService<ILogger<SwaggerV2StartupFilter>>(),
55-
new SwaggerOptionsV2
56-
{
57-
Version = "1.0",
58-
Title = "API",
59-
Description = "API",
60-
Name = "v1",
61-
SwaggerRoute = "/app/docs/v1/swagger.json",
62-
SwaggerUiRoute = "/app/docs",
63-
Configure = settings =>
64-
{
65-
settings.UseJsonEditor = false;
66-
settings.GeneratorSettings.DefaultEnumHandling = EnumHandling.String;
67-
settings.GeneratorSettings.DefaultPropertyNameHandling = PropertyNameHandling.CamelCase;
68-
settings.GeneratorSettings.Version = Assembly.GetEntryAssembly().GetName().Version.ToString();
69-
},
70-
});
71-
});
72-
53+
7354
//last
7455
services.AddTransient<IStartupFilter, HangfireStartupFilter>();
7556

@@ -108,6 +89,17 @@ public void Configure(
10889

10990
//Add custom middleware or use IStartupFilter
11091

92+
app.UseSwaggerUi3(settings =>
93+
{
94+
settings.GeneratorSettings.Title = "API";
95+
settings.GeneratorSettings.Description = "API";
96+
settings.SwaggerRoute = "/app/docs/v1/swagger.json";
97+
settings.SwaggerUiRoute = "/app/docs";
98+
settings.GeneratorSettings.DefaultEnumHandling = EnumHandling.String;
99+
settings.GeneratorSettings.DefaultPropertyNameHandling = PropertyNameHandling.CamelCase;
100+
settings.GeneratorSettings.Version = Assembly.GetEntryAssembly().GetName().Version.ToString();
101+
});
102+
111103
appLifetime.ApplicationStopped.Register(() =>
112104
{
113105
Log.CloseAndFlush();

src/ArchitectNow.Web.Sql/StartupSample.cs

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
using Microsoft.Extensions.DependencyInjection;
1616
using Microsoft.Extensions.Logging;
1717
using NJsonSchema;
18+
using NSwag.AspNetCore;
1819
using Serilog;
1920

2021
namespace ArchitectNow.Web.Sql
@@ -49,27 +50,7 @@ public IServiceProvider ConfigureServices(IServiceCollection services)
4950

5051
//Register startup filters (order matters)
5152
services.AddTransient<IStartupFilter, AntiForgeryStartupFilter>();
52-
services.AddTransient<IStartupFilter, SwaggerV2StartupFilter>(serviceProvider =>
53-
{
54-
return new SwaggerV2StartupFilter( serviceProvider.GetService<ILogger<SwaggerV2StartupFilter>>(),
55-
new SwaggerOptionsV2
56-
{
57-
Version = "1.0",
58-
Title = "API",
59-
Description = "API",
60-
Name = "v1",
61-
SwaggerRoute = "/app/docs/v1/swagger.json",
62-
SwaggerUiRoute = "/app/docs",
63-
Configure = settings =>
64-
{
65-
settings.UseJsonEditor = false;
66-
settings.GeneratorSettings.DefaultEnumHandling = EnumHandling.String;
67-
settings.GeneratorSettings.DefaultPropertyNameHandling = PropertyNameHandling.CamelCase;
68-
settings.GeneratorSettings.Version = Assembly.GetEntryAssembly().GetName().Version.ToString();
69-
},
70-
});
71-
});
72-
53+
7354
//last
7455
services.AddTransient<IStartupFilter, HangfireStartupFilter>();
7556

@@ -107,6 +88,16 @@ public void Configure(
10788
_logger.LogInformation($"{nameof(Configure)} starting...");
10889

10990
//Add custom middleware or use IStartupFilter
91+
app.UseSwaggerUi3(settings =>
92+
{
93+
settings.GeneratorSettings.Title = "API";
94+
settings.GeneratorSettings.Description = "API";
95+
settings.SwaggerRoute = "/app/docs/v1/swagger.json";
96+
settings.SwaggerUiRoute = "/app/docs";
97+
settings.GeneratorSettings.DefaultEnumHandling = EnumHandling.String;
98+
settings.GeneratorSettings.DefaultPropertyNameHandling = PropertyNameHandling.CamelCase;
99+
settings.GeneratorSettings.Version = Assembly.GetEntryAssembly().GetName().Version.ToString();
100+
});
110101

111102
appLifetime.ApplicationStopped.Register(() =>
112103
{
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using ArchitectNow.Web.Models;
4+
using Microsoft.AspNetCore.Builder.Internal;
5+
using NJsonSchema;
6+
using NSwag.AspNetCore;
7+
using NSwag.SwaggerGeneration.WebApi;
8+
9+
namespace ArchitectNow.Web.Configuration
10+
{
11+
public static class SwaggerExtensions
12+
{
13+
public static void ConfigureSwaggerUi3(this ApplicationBuilder builder,
14+
IEnumerable<SwaggerOptions<SwaggerUi3Settings<WebApiToSwaggerGeneratorSettings>>> options)
15+
{
16+
foreach (var option in options)
17+
{
18+
if (option.Controllers?.Any() == true)
19+
{
20+
builder.UseSwaggerUi3(option.Controllers, settings => { ConfigureSettings(settings, option); });
21+
}
22+
else
23+
{
24+
builder.UseSwaggerUi3(option.ControllerAssembly, settings => { ConfigureSettings(settings, option); });
25+
}
26+
}
27+
}
28+
29+
public static void ConfigureSwaggerUi(this ApplicationBuilder builder,
30+
IEnumerable<SwaggerOptions<SwaggerUiSettings<WebApiToSwaggerGeneratorSettings>>> options)
31+
{
32+
foreach (var option in options)
33+
{
34+
if (option.Controllers?.Any() == true)
35+
{
36+
builder.UseSwaggerUi(option.Controllers, settings => { ConfigureSettings(settings, option); });
37+
}
38+
else
39+
{
40+
builder.UseSwaggerUi(option.ControllerAssembly, settings => { ConfigureSettings(settings, option); });
41+
}
42+
}
43+
}
44+
45+
public static void ConfigureSwaggerReDoc(this ApplicationBuilder builder,
46+
IEnumerable<SwaggerOptions<SwaggerReDocSettings<WebApiToSwaggerGeneratorSettings>>> options)
47+
{
48+
foreach (var option in options)
49+
{
50+
if (option.Controllers?.Any() == true)
51+
{
52+
builder.UseSwaggerReDoc(option.Controllers, settings => { ConfigureSettings(settings, option); });
53+
}
54+
else
55+
{
56+
builder.UseSwaggerReDoc(option.ControllerAssembly, settings => { ConfigureSettings(settings, option); });
57+
}
58+
}
59+
}
60+
61+
private static void ConfigureSettings<T>(T settings, SwaggerOptions<T> option) where T : SwaggerUiSettingsBase<WebApiToSwaggerGeneratorSettings>
62+
{
63+
settings.SwaggerRoute = option.SwaggerRoute;
64+
settings.SwaggerUiRoute = option.SwaggerUiRoute;
65+
settings.GeneratorSettings.DefaultPropertyNameHandling = PropertyNameHandling.CamelCase;
66+
settings.GeneratorSettings.Title = option.Title;
67+
settings.GeneratorSettings.FlattenInheritanceHierarchy = true;
68+
settings.GeneratorSettings.IsAspNetCore = true;
69+
70+
foreach (var optionDocumentProcessor in option.DocumentProcessors)
71+
{
72+
settings.GeneratorSettings.DocumentProcessors.Add(optionDocumentProcessor);
73+
}
74+
75+
foreach (var operationProcessor in option.OperationProcessors)
76+
{
77+
settings.GeneratorSettings.OperationProcessors.Add(operationProcessor);
78+
}
79+
80+
var action = option.Configure;
81+
action?.Invoke(settings);
82+
}
83+
}
84+
}

src/ArchitectNow.Web/Configuration/SwaggerStartupBase.cs

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)