From 326d17974a51a41693d45fe30f2c41c3b7df0128 Mon Sep 17 00:00:00 2001 From: Simon Gockner Date: Wed, 12 Feb 2020 14:08:20 +0100 Subject: [PATCH] #9: use lightweightIocContainer - add factories and installer - add bootstrapper - use logging factories --- GBase.Server/Bootstrapper.cs | 19 ++++++++++++ .../Factories/IGBaseServerSettingsFactory.cs | 14 +++++++++ GBase.Server/GBase.Server.csproj | 1 + .../Installers/GBaseServerInstaller.cs | 23 ++++++++++++++ GBase.Server/Program.cs | 30 ++++++++++++++----- 5 files changed, 79 insertions(+), 8 deletions(-) create mode 100644 GBase.Server/Bootstrapper.cs create mode 100644 GBase.Server/Factories/IGBaseServerSettingsFactory.cs create mode 100644 GBase.Server/Installers/GBaseServerInstaller.cs diff --git a/GBase.Server/Bootstrapper.cs b/GBase.Server/Bootstrapper.cs new file mode 100644 index 0000000..0452207 --- /dev/null +++ b/GBase.Server/Bootstrapper.cs @@ -0,0 +1,19 @@ +// Author: Gockner, Simon +// Created: 2020-02-12 +// Copyright(c) 2020 SimonG. All Rights Reserved. + +using GBase.Logging.Installers; +using GBase.Server.Installers; +using LightweightIocContainer; +using LightweightIocContainer.Interfaces; + +namespace GBase.Server +{ + public class Bootstrapper + { + public IIocContainer BootstrapContainer() => + new IocContainer().Install( + new GBaseServerInstaller(), + new LoggingInstaller()); + } +} \ No newline at end of file diff --git a/GBase.Server/Factories/IGBaseServerSettingsFactory.cs b/GBase.Server/Factories/IGBaseServerSettingsFactory.cs new file mode 100644 index 0000000..12540f6 --- /dev/null +++ b/GBase.Server/Factories/IGBaseServerSettingsFactory.cs @@ -0,0 +1,14 @@ +// Author: Gockner, Simon +// Created: 2020-02-12 +// Copyright(c) 2020 SimonG. All Rights Reserved. + + +using GBase.Server.Interfaces; + +namespace GBase.Server.Factories +{ + public interface IGBaseServerSettingsFactory + { + IGBaseServerSettings Create(); + } +} \ No newline at end of file diff --git a/GBase.Server/GBase.Server.csproj b/GBase.Server/GBase.Server.csproj index e7c65c9..19a160a 100644 --- a/GBase.Server/GBase.Server.csproj +++ b/GBase.Server/GBase.Server.csproj @@ -16,6 +16,7 @@ + diff --git a/GBase.Server/Installers/GBaseServerInstaller.cs b/GBase.Server/Installers/GBaseServerInstaller.cs new file mode 100644 index 0000000..2cbb073 --- /dev/null +++ b/GBase.Server/Installers/GBaseServerInstaller.cs @@ -0,0 +1,23 @@ +// Author: Gockner, Simon +// Created: 2020-02-12 +// Copyright(c) 2020 SimonG. All Rights Reserved. + + +using GBase.Server.Factories; +using GBase.Server.Interfaces; +using LightweightIocContainer.Interfaces; +using LightweightIocContainer.Interfaces.Installers; + +namespace GBase.Server.Installers +{ + public class GBaseServerInstaller : IIocInstaller + { + public void Install(IIocContainer container) + { + container.Register(); + + //factories + container.RegisterFactory(); + } + } +} \ No newline at end of file diff --git a/GBase.Server/Program.cs b/GBase.Server/Program.cs index ca4da73..96b8a46 100644 --- a/GBase.Server/Program.cs +++ b/GBase.Server/Program.cs @@ -6,9 +6,11 @@ using System; using System.Threading.Tasks; using CoreWCF.Configuration; using GBase.Api.Communication; -using GBase.Logging; +using GBase.Logging.Factories; using GBase.Logging.Interfaces; +using GBase.Server.Factories; using GBase.Server.Interfaces; +using LightweightIocContainer.Interfaces; using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; @@ -19,28 +21,40 @@ namespace GBase.Server { static async Task Main(string[] args) { + Bootstrapper bootstrapper = new Bootstrapper(); + IIocContainer kernel = bootstrapper.BootstrapContainer(); + + ILogFactory logFactory = kernel.Resolve(); + ILog log = logFactory.Create(); + log.InitializeLog(); + + IConsoleLoggerFactory consoleLoggerFactory = kernel.Resolve(); + log.AddLogger(consoleLoggerFactory.Create()); + try { - ILog log = new Log(); - log.InitializeLog(); - log.AddLogger(new ConsoleLogger()); - - IGBaseServerSettings serverSettings = new GBaseServerSettings(); + IGBaseServerSettingsFactory gBaseServerSettingsFactory = kernel.Resolve(); + IGBaseServerSettings serverSettings = gBaseServerSettingsFactory.Create(); await serverSettings.ParseArguments(args); - log.AddLogger(new FileLogger(serverSettings.LogFilePath, serverSettings.LogFileName)); + IFileLoggerFactory fileLoggerFactory = kernel.Resolve(); + log.AddLogger(fileLoggerFactory.Create(serverSettings.LogFilePath, serverSettings.LogFileName)); IWebHost host = CreateWebHostBuilder(serverSettings).Build(); await host.RunAsync(); host.Dispose(); //TestMe: Check if this destroys the server while it is running - await log.DisposeAsync(); } catch (Exception ex) //TODO: decide what to do in this case { Console.WriteLine(ex); throw; } + finally + { + await log.DisposeAsync(); + kernel.Dispose(); + } } private static IWebHostBuilder CreateWebHostBuilder(IGBaseServerSettings serverSettings)