Добавил DI, основные классы создаются через вбрасывание зависимостей через конструктор
This commit is contained in:
+33
-15
@@ -1,9 +1,12 @@
|
||||
using System;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
using System.Threading;
|
||||
using ZaoBot.Config;
|
||||
using ZaoBot.OpenHab;
|
||||
|
||||
namespace ZaoBot
|
||||
{
|
||||
@@ -12,30 +15,45 @@ namespace ZaoBot
|
||||
static BotService bot;
|
||||
static JsonDocument config;
|
||||
|
||||
static ServiceCollection services;
|
||||
|
||||
static void Main(string[] args)
|
||||
{
|
||||
CultureInfo.CurrentCulture = CultureInfo.InvariantCulture;
|
||||
config = LoadConfig();
|
||||
var receiver = new NotificationReceiver(config);
|
||||
var notificationThread = new Thread(new ThreadStart(receiver.Run));
|
||||
notificationThread.Start();
|
||||
while (true)
|
||||
services = new ServiceCollection();
|
||||
services.AddSingleton<IConfig, Config.Config>(CreateConfig);
|
||||
services.AddSingleton<BotService, BotService>();
|
||||
services.AddSingleton<OpenHabClient, OpenHabClient>();
|
||||
services.AddSingleton<NotificationReceiver, NotificationReceiver>();
|
||||
using (var provider = services.BuildServiceProvider())
|
||||
{
|
||||
try
|
||||
var receiver = provider.GetRequiredService<NotificationReceiver>();
|
||||
var notificationThread = new Thread(new ThreadStart(receiver.Run));
|
||||
notificationThread.Start();
|
||||
while (true)
|
||||
{
|
||||
bot = new BotService(config);
|
||||
bot.Run();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// Тут ловим всё, при ошибках просто заново поднимаем бота
|
||||
Console.WriteLine("Exception: " + e.Message);
|
||||
Console.WriteLine(e.StackTrace);
|
||||
Console.WriteLine("Restarting bot");
|
||||
try
|
||||
{
|
||||
bot = provider.GetRequiredService<BotService>();
|
||||
bot.Run();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// Тут ловим всё, при ошибках просто заново поднимаем бота
|
||||
Console.WriteLine("Exception: " + e.Message);
|
||||
Console.WriteLine(e.StackTrace);
|
||||
Console.WriteLine("Restarting bot");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static Config.Config CreateConfig(IServiceProvider arg)
|
||||
{
|
||||
return new Config.Config(config);
|
||||
}
|
||||
|
||||
private static JsonDocument LoadConfig()
|
||||
{
|
||||
string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
|
||||
|
||||
Reference in New Issue
Block a user