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)