Server create container&element
This commit is contained in:
23
src/Server/FileTime.Server/FileTime.Server.csproj
Normal file
23
src/Server/FileTime.Server/FileTime.Server.csproj
Normal 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>
|
||||
64
src/Server/FileTime.Server/Program.cs
Normal file
64
src/Server/FileTime.Server/Program.cs
Normal 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();
|
||||
}
|
||||
Reference in New Issue
Block a user