#9: use lightweightIocContainer

- add factories and installer
- add bootstrapper
- use logging factories
pull/26/head
Simon Gockner 6 years ago
parent fcb5d7fd27
commit 326d17974a
  1. 19
      GBase.Server/Bootstrapper.cs
  2. 14
      GBase.Server/Factories/IGBaseServerSettingsFactory.cs
  3. 1
      GBase.Server/GBase.Server.csproj
  4. 23
      GBase.Server/Installers/GBaseServerInstaller.cs
  5. 30
      GBase.Server/Program.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());
}
}

@ -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();
}
}

@ -16,6 +16,7 @@
<PackageReference Include="CoreWCF.Http" Version="0.1.0-alpha.64" /> <PackageReference Include="CoreWCF.Http" Version="0.1.0-alpha.64" />
<PackageReference Include="CoreWCF.NetTcp" Version="0.1.0-alpha.64" /> <PackageReference Include="CoreWCF.NetTcp" Version="0.1.0-alpha.64" />
<PackageReference Include="CoreWCF.Primitives" Version="0.1.0-alpha.64" /> <PackageReference Include="CoreWCF.Primitives" Version="0.1.0-alpha.64" />
<PackageReference Include="LightweightIocContainer" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
</ItemGroup> </ItemGroup>

@ -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<IGBaseServerSettings, GBaseServerSettings>();
//factories
container.RegisterFactory<IGBaseServerSettingsFactory>();
}
}
}

@ -6,9 +6,11 @@ using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using CoreWCF.Configuration; using CoreWCF.Configuration;
using GBase.Api.Communication; using GBase.Api.Communication;
using GBase.Logging; using GBase.Logging.Factories;
using GBase.Logging.Interfaces; using GBase.Logging.Interfaces;
using GBase.Server.Factories;
using GBase.Server.Interfaces; using GBase.Server.Interfaces;
using LightweightIocContainer.Interfaces;
using Microsoft.AspNetCore; using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
@ -19,28 +21,40 @@ namespace GBase.Server
{ {
static async Task Main(string[] args) static async Task Main(string[] args)
{ {
Bootstrapper bootstrapper = new Bootstrapper();
IIocContainer kernel = bootstrapper.BootstrapContainer();
ILogFactory logFactory = kernel.Resolve<ILogFactory>();
ILog log = logFactory.Create();
log.InitializeLog();
IConsoleLoggerFactory consoleLoggerFactory = kernel.Resolve<IConsoleLoggerFactory>();
log.AddLogger(consoleLoggerFactory.Create());
try try
{ {
ILog log = new Log(); IGBaseServerSettingsFactory gBaseServerSettingsFactory = kernel.Resolve<IGBaseServerSettingsFactory>();
log.InitializeLog(); IGBaseServerSettings serverSettings = gBaseServerSettingsFactory.Create();
log.AddLogger(new ConsoleLogger());
IGBaseServerSettings serverSettings = new GBaseServerSettings();
await serverSettings.ParseArguments(args); await serverSettings.ParseArguments(args);
log.AddLogger(new FileLogger(serverSettings.LogFilePath, serverSettings.LogFileName)); IFileLoggerFactory fileLoggerFactory = kernel.Resolve<IFileLoggerFactory>();
log.AddLogger(fileLoggerFactory.Create(serverSettings.LogFilePath, serverSettings.LogFileName));
IWebHost host = CreateWebHostBuilder(serverSettings).Build(); IWebHost host = CreateWebHostBuilder(serverSettings).Build();
await host.RunAsync(); await host.RunAsync();
host.Dispose(); //TestMe: Check if this destroys the server while it is running 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 catch (Exception ex) //TODO: decide what to do in this case
{ {
Console.WriteLine(ex); Console.WriteLine(ex);
throw; throw;
} }
finally
{
await log.DisposeAsync();
kernel.Dispose();
}
} }
private static IWebHostBuilder CreateWebHostBuilder(IGBaseServerSettings serverSettings) private static IWebHostBuilder CreateWebHostBuilder(IGBaseServerSettings serverSettings)

Loading…
Cancel
Save