Server create container&element

This commit is contained in:
2023-07-26 08:12:53 +02:00
parent 40cb643a32
commit e70bc3643a
20 changed files with 483 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\AppCommon\FileTime.App.DependencyInjection\FileTime.App.DependencyInjection.csproj" />
<ProjectReference Include="..\..\Providers\FileTime.Providers.Local\FileTime.Providers.Local.csproj" />
<ProjectReference Include="..\FileTime.Server.App\FileTime.Server.App.csproj" />
<ProjectReference Include="..\FileTime.Server.Web\FileTime.Server.Web.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Serilog" Version="3.0.1" />
<PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,64 @@
using Autofac;
using Autofac.Extensions.DependencyInjection;
using FileTime.App.DependencyInjection;
using FileTime.Providers.Local;
using FileTime.Server.App;
using FileTime.Server.Common;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Serilog;
var applicationCancellation = new CancellationTokenSource();
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
var bootstrapConfiguration = CreateConfiguration();
var rootContainer = CreateRootDiContainer(bootstrapConfiguration);
var webThread = CreateStartup(FileTime.Server.Web.Program.Start);
webThread.Start();
Thread CreateStartup(Func<string[], IContainer, CancellationToken, Task> startup)
{
var thread = new Thread(() => { HandleStartup(() => startup(args, rootContainer, applicationCancellation.Token).Wait()); });
return thread;
}
void HandleStartup(Action action)
{
try
{
action();
}
catch (Exception e)
{
Console.WriteLine(e);
throw;
}
}
IConfigurationRoot CreateConfiguration()
{
var configurationBuilder = new ConfigurationBuilder();
return configurationBuilder.Build();
}
IContainer CreateRootDiContainer(IConfigurationRoot configuration)
{
var serviceCollection = DependencyInjection
.RegisterDefaultServices(configuration)
.AddLocalProviderServices()
.AddServerServices();
serviceCollection.TryAddSingleton<IApplicationStopper>(
new ApplicationStopper(() => applicationCancellation.Cancel())
);
var containerBuilder = new ContainerBuilder();
containerBuilder.Populate(serviceCollection);
return containerBuilder.Build();
}