From 5d830a5eb67a9bf946ad5ce761a1f242530618cd Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sun, 12 Nov 2017 13:40:18 +0100 Subject: [PATCH] Bugfix and cleanup --- src/Squidex/AppConfiguration.cs | 3 + .../Config/Domain/EventStoreExtensions.cs | 10 +--- .../Config/Domain/InfrastructureServices.cs | 2 +- .../Config/Domain/LoggingExtensions.cs | 36 ++++++++++++ src/Squidex/Config/Domain/ReadServices.cs | 3 +- src/Squidex/Config/Domain/SystemExtensions.cs | 8 +-- src/Squidex/Config/ServiceExtensions.cs | 9 ++- src/Squidex/Program.cs | 5 +- src/Squidex/{WebApp.cs => WebStartup.cs} | 57 ++++++++++--------- 9 files changed, 83 insertions(+), 50 deletions(-) create mode 100644 src/Squidex/Config/Domain/LoggingExtensions.cs rename src/Squidex/{WebApp.cs => WebStartup.cs} (70%) diff --git a/src/Squidex/AppConfiguration.cs b/src/Squidex/AppConfiguration.cs index 63579016c..16a9fa09e 100644 --- a/src/Squidex/AppConfiguration.cs +++ b/src/Squidex/AppConfiguration.cs @@ -15,9 +15,12 @@ namespace Squidex public static void AddAppConfiguration(this IConfigurationBuilder builder, string environmentName, string[] args) { builder.Sources.Clear(); + builder.AddJsonFile("appsettings.json", true, true); builder.AddJsonFile($"appsettings.{environmentName}.json", true); + builder.AddEnvironmentVariables(); + builder.AddCommandLine(args); } } diff --git a/src/Squidex/Config/Domain/EventStoreExtensions.cs b/src/Squidex/Config/Domain/EventStoreExtensions.cs index 0a925c656..88d0ac501 100644 --- a/src/Squidex/Config/Domain/EventStoreExtensions.cs +++ b/src/Squidex/Config/Domain/EventStoreExtensions.cs @@ -1,12 +1,12 @@ // ========================================================================== -// EventStoreUsages.cs +// EventStoreExtensions.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group // All rights reserved. // ========================================================================== -using Microsoft.AspNetCore.Builder; +using System; using Microsoft.Extensions.DependencyInjection; using Squidex.Infrastructure.Actors; using Squidex.Infrastructure.CQRS.Events; @@ -16,10 +16,8 @@ namespace Squidex.Config.Domain { public static class EventStoreExtensions { - public static IApplicationBuilder UseMyEventStore(this IApplicationBuilder app) + public static void UseMyEventStore(this IServiceProvider services) { - var services = app.ApplicationServices; - services.GetService().CleanAsync().Wait(); var consumers = services.GetServices(); @@ -35,8 +33,6 @@ namespace Squidex.Config.Domain services.GetService().Connect(consumer.Name, actor); } } - - return app; } } } diff --git a/src/Squidex/Config/Domain/InfrastructureServices.cs b/src/Squidex/Config/Domain/InfrastructureServices.cs index f6c8884d5..a2c33d9ec 100644 --- a/src/Squidex/Config/Domain/InfrastructureServices.cs +++ b/src/Squidex/Config/Domain/InfrastructureServices.cs @@ -50,7 +50,7 @@ namespace Squidex.Config.Domain .As(); } - services.AddSingleton(c => new ApplicationInfoLogAppender(typeof(Startup).Assembly, Guid.NewGuid())) + services.AddSingleton(c => new ApplicationInfoLogAppender(typeof(Program).Assembly, Guid.NewGuid())) .As(); services.AddSingleton() diff --git a/src/Squidex/Config/Domain/LoggingExtensions.cs b/src/Squidex/Config/Domain/LoggingExtensions.cs new file mode 100644 index 000000000..6571256e5 --- /dev/null +++ b/src/Squidex/Config/Domain/LoggingExtensions.cs @@ -0,0 +1,36 @@ +// ========================================================================== +// LoggingExtensions.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System; +using System.Linq; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Squidex.Infrastructure.Log; + +namespace Squidex.Config.Domain +{ + public static class LoggingExtensions + { + public static void LogConfiguration(this IServiceProvider services) + { + var log = services.GetRequiredService(); + + var config = services.GetRequiredService(); + + log.LogInformation(w => w + .WriteProperty("message", "Application started") + .WriteObject("environment", c => + { + foreach (var kvp in config.AsEnumerable().Where(kvp => kvp.Value != null)) + { + c.WriteProperty(kvp.Key, kvp.Value); + } + })); + } + } +} diff --git a/src/Squidex/Config/Domain/ReadServices.cs b/src/Squidex/Config/Domain/ReadServices.cs index 730a5b156..a0d908423 100644 --- a/src/Squidex/Config/Domain/ReadServices.cs +++ b/src/Squidex/Config/Domain/ReadServices.cs @@ -46,8 +46,7 @@ namespace Squidex.Config.Domain exposeSourceUrl)) .As(); - services.AddSingleton(c => c.GetService>()?.Value?.Plans.OrEmpty()) - .As>(); + services.AddSingleton(c => c.GetService>()?.Value?.Plans.OrEmpty()); services.AddSingleton() .As(); diff --git a/src/Squidex/Config/Domain/SystemExtensions.cs b/src/Squidex/Config/Domain/SystemExtensions.cs index 6e6e5ce01..ed8a4bccd 100644 --- a/src/Squidex/Config/Domain/SystemExtensions.cs +++ b/src/Squidex/Config/Domain/SystemExtensions.cs @@ -6,8 +6,8 @@ // All rights reserved. // ========================================================================== +using System; using System.Collections.Generic; -using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Squidex.Infrastructure; @@ -15,16 +15,14 @@ namespace Squidex.Config.Domain { public static class SystemExtensions { - public static IApplicationBuilder TestExternalSystems(this IApplicationBuilder app) + public static void TestExternalSystems(this IServiceProvider services) { - var systems = app.ApplicationServices.GetRequiredService>(); + var systems = services.GetRequiredService>(); foreach (var system in systems) { system.Connect(); } - - return app; } } } diff --git a/src/Squidex/Config/ServiceExtensions.cs b/src/Squidex/Config/ServiceExtensions.cs index 7b4255849..d669bb64a 100644 --- a/src/Squidex/Config/ServiceExtensions.cs +++ b/src/Squidex/Config/ServiceExtensions.cs @@ -27,10 +27,13 @@ namespace Squidex.Config public InterfaceRegistrator As() { - this.services.AddSingleton(typeof(TInterface), c => + if (typeof(TInterface) != typeof(T)) { - return c.GetRequiredService(); - }); + this.services.AddSingleton(typeof(TInterface), c => + { + return c.GetRequiredService(); + }); + } return this; } diff --git a/src/Squidex/Program.cs b/src/Squidex/Program.cs index f109dc475..2cde15aa0 100644 --- a/src/Squidex/Program.cs +++ b/src/Squidex/Program.cs @@ -20,6 +20,7 @@ namespace Squidex .UseKestrel(k => { k.AddServerHeader = false; }) .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() + .UseStartup() .ConfigureLogging(builder => { builder.AddSemanticLog(); @@ -28,10 +29,6 @@ namespace Squidex { builder.AddAppConfiguration(hostContext.HostingEnvironment.EnvironmentName, args); }) - .ConfigureServices((context, services) => - { - services.AddAppServices(context.Configuration); - }) .Build() .Run(); } diff --git a/src/Squidex/WebApp.cs b/src/Squidex/WebStartup.cs similarity index 70% rename from src/Squidex/WebApp.cs rename to src/Squidex/WebStartup.cs index 6b6a5f764..47195309c 100644 --- a/src/Squidex/WebApp.cs +++ b/src/Squidex/WebStartup.cs @@ -6,6 +6,7 @@ // All rights reserved. // ========================================================================== +using System; using System.IO; using System.Linq; using Microsoft.AspNetCore.Builder; @@ -24,8 +25,10 @@ using Squidex.Infrastructure.Log; namespace Squidex { - public static class WebApp + public class WebStartup : IStartup { + private readonly IConfiguration configuration; + private readonly IHostingEnvironment environment; private static readonly string[] IdentityServerPaths = { "/client-callback-popup", @@ -34,42 +37,40 @@ namespace Squidex "/error" }; - public static void ConfigureApp(this IApplicationBuilder app) + public WebStartup(IConfiguration configuration, IHostingEnvironment environment) { - var env = app.ApplicationServices.GetRequiredService(); + this.configuration = configuration; + this.environment = environment; + } + + public IServiceProvider ConfigureServices(IServiceCollection services) + { + services.AddAppServices(configuration); - app.TestExternalSystems(); + return services.BuildServiceProvider(); + } + + public void Configure(IApplicationBuilder app) + { + app.ApplicationServices.LogConfiguration(); + app.ApplicationServices.TestExternalSystems(); app.UseMyCors(); app.UseMyForwardingRules(); app.UseMyTracking(); - app.MapAndUseIdentityServer(env); - app.MapAndUseApi(env); - app.MapAndUseFrontend(env); - - var log = app.ApplicationServices.GetRequiredService(); - - var config = app.ApplicationServices.GetRequiredService(); - - log.LogInformation(w => w - .WriteProperty("message", "Application started") - .WriteObject("environment", c => - { - foreach (var kvp in config.AsEnumerable().Where(kvp => kvp.Value != null)) - { - c.WriteProperty(kvp.Key, kvp.Value); - } - })); + MapAndUseIdentityServer(app); + MapAndUseApi(app); + MapAndUseFrontend(app); - app.UseMyEventStore(); + app.ApplicationServices.UseMyEventStore(); } - private static void MapAndUseIdentityServer(this IApplicationBuilder app, IHostingEnvironment env) + private void MapAndUseIdentityServer(IApplicationBuilder app) { app.Map(Constants.IdentityPrefix, identityApp => { - if (env.IsDevelopment()) + if (environment.IsDevelopment()) { identityApp.UseDeveloperExceptionPage(); } @@ -91,11 +92,11 @@ namespace Squidex }); } - private static void MapAndUseApi(this IApplicationBuilder app, IHostingEnvironment env) + private void MapAndUseApi(IApplicationBuilder app) { app.Map(Constants.ApiPrefix, appApi => { - if (env.IsDevelopment()) + if (environment.IsDevelopment()) { appApi.UseDeveloperExceptionPage(); } @@ -109,9 +110,9 @@ namespace Squidex }); } - private static void MapAndUseFrontend(this IApplicationBuilder app, IHostingEnvironment env) + private void MapAndUseFrontend(IApplicationBuilder app) { - if (env.IsDevelopment()) + if (environment.IsDevelopment()) { app.UseWebpackProxy();