-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
77 lines (65 loc) · 2.35 KB
/
Program.cs
File metadata and controls
77 lines (65 loc) · 2.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using Avalonia;
using Avalonia.ReactiveUI;
using Microsoft.Extensions.DependencyInjection;
using NLog;
using NPFGEO.LWD.Net;
using RFD.Interfaces;
using RFD.Services;
using RFD.ViewModels;
namespace RFD;
internal sealed class Program
{
public static IServiceProvider? Services { get; private set; }
[STAThread]
public static void Main(string[] args)
{
var logger = LogManager.Setup()
.LoadConfigurationFromFile("NLog.config")
.GetCurrentClassLogger();
try
{
logger.Debug("Инициализация приложения");
// Создаем DI контейнер
var services = new ServiceCollection();
// Конфигурация сервисов
ConfigureServices(services);
// Строим провайдер сервисов
Services = services.BuildServiceProvider();
// Запуск Avalonia
BuildAvaloniaApp()
.StartWithClassicDesktopLifetime(args);
}
catch (Exception ex)
{
logger.Error(ex, "Необработанное исключение при запуске");
throw;
}
finally
{
LogManager.Shutdown();
}
}
// Конфигурация DI сервисов
private static void ConfigureServices(IServiceCollection services)
{
// 1. Сначала регистрируем зависимости нижнего уровня
services.AddSingleton<Client>();
services.AddSingleton<ServerListener>();
// 2. Затем сервисы, которые зависят от Client
services.AddSingleton<IConnectionService, ConnectionService>();
services.AddSingleton<IBroadcastListener, BroadcastListener>();
// 3. Регистрируем логгер
services.AddSingleton<ILoggerService, NLoggerService>();
services.AddSingleton<IWindowService, WindowService>();
services.AddSingleton<MainWindowViewModel>();
}
// Avalonia configuration, don't remove; also used by visual designer.
private static AppBuilder BuildAvaloniaApp()
{
return AppBuilder.Configure<App>()
.UsePlatformDetect()
.WithInterFont()
.LogToTrace()
.UseReactiveUI();
}
}