diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs index 348358c..8a62418 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/AbstractCompany.cs @@ -1,4 +1,5 @@ using ProjectAircraftCarrier_.Drawnings; +using ProjectAircraftCarrier_.Exceptions; namespace ProjectAircraftCarrier_.CollectionGenericObjects; @@ -80,7 +81,14 @@ public abstract class AbstractCompany public DrawningWarship? GetRandomObject() { Random rnd = new(); - return _collection?.Get(rnd.Next(GetMaxCount)); + try + { + return _collection?.Get(rnd.Next(GetMaxCount)); + } + catch (ObjectNotFoundException) + { + return null; + } } /// @@ -96,8 +104,15 @@ public abstract class AbstractCompany SetObjectsPosition(); for (int i = 0; i < (_collection?.Count ?? 0); ++i) { - DrawningWarship? obj = _collection?.Get(i); - obj?.DrawTransport(graphics); + try + { + DrawningWarship? obj = _collection?.Get(i); + obj?.DrawTransport(graphics); + } + catch (ObjectNotFoundException) + { + continue; + } } return bitmap; diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/Docks.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/Docks.cs index 44ab95c..d57dbbc 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/Docks.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/Docks.cs @@ -1,5 +1,6 @@  using ProjectAircraftCarrier_.Drawnings; +using ProjectAircraftCarrier_.Exceptions; namespace ProjectAircraftCarrier_.CollectionGenericObjects; @@ -40,21 +41,28 @@ public class Docks : AbstractCompany for (int i = 0; i < (_collection?.Count ?? 0); i++) { - if (_collection?.Get(i) != null) + try { - int x = 5 + _placeSizeWidth * n; - int y = (10 + _placeSizeHeight * (_pictureHeight / _placeSizeHeight - 1)) - _placeSizeHeight * m; + if (_collection?.Get(i) != null) + { + int x = 5 + _placeSizeWidth * n; + int y = (10 + _placeSizeHeight * (_pictureHeight / _placeSizeHeight - 1)) - _placeSizeHeight * m; - _collection?.Get(i)?.SetPictureSize(_pictureWidth, _pictureHeight); - _collection?.Get(i)?.SetPosition(x, y); + _collection?.Get(i)?.SetPictureSize(_pictureWidth, _pictureHeight); + _collection?.Get(i)?.SetPosition(x, y); + } + + if (n < _pictureWidth / _placeSizeWidth) n++; + + else + { + n = 0; + m++; + } } - - if (n < _pictureWidth / _placeSizeWidth) - n++; - else + catch (ObjectNotFoundException) { - n = 0; - m++; + break; } } } diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ListGenericObjects.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ListGenericObjects.cs index 6e0016d..ffc76c4 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ListGenericObjects.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/ListGenericObjects.cs @@ -1,4 +1,4 @@ -using System.CodeDom.Compiler; +using ProjectAircraftCarrier_.Exceptions; namespace ProjectAircraftCarrier_.CollectionGenericObjects; @@ -35,9 +35,10 @@ public class ListGenericObjects : ICollectionGenericObjects public T? Get(int position) { + // TODO выброс ошибки, если выход за границы списка if (position < 0 || position >= Count) { - return null; + throw new PositionOutOfCollectionException(position); } return _collection[position]; @@ -45,9 +46,10 @@ public class ListGenericObjects : ICollectionGenericObjects public int Insert(T obj) { + // TODO выброс ошибки, если переполнение if (Count == _maxCount) { - return -1; + throw new CollectionOverflowException(Count); } _collection.Add(obj); @@ -56,25 +58,31 @@ public class ListGenericObjects : ICollectionGenericObjects public int Insert(T obj, int position) { - if (Count == _maxCount || position < 0 || position > Count) + // TODO выброс ошибки, если выход за границы списка + // TODO выброс ошибки, если переполнение + if (position < 0 || position > Count) { - return -1; + throw new PositionOutOfCollectionException(position); } - + if (Count == _maxCount) + { + throw new CollectionOverflowException(Count); + } + _collection.Insert(position, obj); return position; } public T? Remove(int position) { + // TODO выброс ошибки, если выход за границы списка if (position < 0 || position > Count) { - return null; + throw new PositionOutOfCollectionException(position); } T? obj = _collection[position]; _collection.RemoveAt(position); - return obj; } diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs index 0de3e9c..f62a297 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/MassiveGenericObjects.cs @@ -1,4 +1,5 @@ - +using ProjectAircraftCarrier_.Exceptions; + namespace ProjectAircraftCarrier_.CollectionGenericObjects; /// @@ -49,15 +50,23 @@ public class MassiveGenericObjects : ICollectionGenericObjects public T? Get(int position) { + // TODO выброс ошибки, если выход за границы массива + // TODO выброс ошибки, если объект пустой if (position < 0 || position >= Count) { - return null; + throw new PositionOutOfCollectionException(position); } + if (_collection[position] == null) + { + throw new ObjectNotFoundException(position); + } + return _collection[position]; } public int Insert(T obj) { + // TODO выброс ошибки, если переполнение for (int i = 0; i < Count; i++) { if (_collection[i] == null) @@ -66,14 +75,17 @@ public class MassiveGenericObjects : ICollectionGenericObjects return i; } } - return -1; + + throw new CollectionOverflowException(Count); } public int Insert(T obj, int position) { + // TODO выброс ошибки, если выход за границы массива + // TODO выброс ошибки, если переполнение if (position < 0 || position >= Count) { - return -1; + throw new PositionOutOfCollectionException(position); } if (_collection[position] == null) @@ -100,14 +112,20 @@ public class MassiveGenericObjects : ICollectionGenericObjects } } - return -1; + throw new CollectionOverflowException(Count); } public T? Remove(int position) { - if (position < 0 || position >= Count || _collection[position] == null) + // TODO выброс ошибки, если выход за границы массива + // TODO выброс ошибки, если объект пустой + if (position < 0 || position >= Count) { - return null; + throw new PositionOutOfCollectionException(position); + } + if (_collection[position] == null) + { + throw new ObjectNotFoundException(position); } T? obj = _collection[position]; diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/StorageCollection.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/StorageCollection.cs index 43873af..2735d2e 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/StorageCollection.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/CollectionGenericObjects/StorageCollection.cs @@ -1,4 +1,5 @@ using ProjectAircraftCarrier_.Drawnings; +using ProjectAircraftCarrier_.Exceptions; using System.Text; namespace ProjectAircraftCarrier_.CollectionGenericObjects; @@ -100,12 +101,11 @@ public class StorageCollection /// Сохранение информации по автомобилям в хранилище в файл /// /// Путь и имя файла - /// true - сохранение прошло успешно, false - ошибка при сохранении данных - public bool SaveData(string filename) + public void SaveData(string filename) { if (_storages.Count == 0) { - return false; + throw new NullReferenceException("В хранилище отсутствуют коллекции для сохранения"); } if (File.Exists(filename)) @@ -146,20 +146,17 @@ public class StorageCollection } } } - - return true; } /// /// Загрузка информации по автомобилям в хранилище из файла /// /// Путь и имя файла - /// true - загрузка прошла успешно, false - ошибка при загрузке данных - public bool LoadData(string filename) + public void LoadData(string filename) { if (!File.Exists(filename)) { - return false; + throw new FileNotFoundException("Файл не существует"); } using (StreamReader sr = new(filename)) @@ -168,12 +165,11 @@ public class StorageCollection if (line == null || line.Length == 0) { - return false; + throw new FileFormatException("В файле нет данных"); } if (!line.Equals(_collectionKey)) { - //если нет такой записи, то это не те данные - return false; + throw new FileFormatException("В файле неверные данные"); } _storages.Clear(); @@ -189,7 +185,7 @@ public class StorageCollection ICollectionGenericObjects? collection = StorageCollection.CreateCollection(collectionType); if (collection == null) { - return false; + throw new InvalidOperationException("Не удалось создать коллекцию"); } collection.MaxCount = Convert.ToInt32(record[2]); @@ -198,17 +194,22 @@ public class StorageCollection { if (elem?.CreateDrawningWarship() is T warship) { - if (collection.Insert(warship) == -1) + try { - return false; + if (collection.Insert(warship) == -1) + { + throw new InvalidOperationException("Объект не удалось добавить в коллекцию: " + record[3]); + } + } + catch (CollectionOverflowException ex) + { + throw new OverflowException("Коллекция переполнена", ex); } } } _storages.Add(record[0], collection); } } - - return true; } /// diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Exceptions/CollectionOverflowException.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Exceptions/CollectionOverflowException.cs new file mode 100644 index 0000000..88d59d7 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Exceptions/CollectionOverflowException.cs @@ -0,0 +1,20 @@ +using System.Runtime.Serialization; + +namespace ProjectAircraftCarrier_.Exceptions; + +/// +/// Класс, описывающий ошибку переполнения коллекции +/// +[Serializable] +internal class CollectionOverflowException : ApplicationException +{ + public CollectionOverflowException(int count) : base("В коллекции превышено допустимое количество: " + count) { } + + public CollectionOverflowException() : base() { } + + public CollectionOverflowException(string message) : base(message) { } + + public CollectionOverflowException(string message, Exception exception) : base(message, exception) { } + + protected CollectionOverflowException(SerializationInfo info, StreamingContext contex) : base(info, contex) { } +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Exceptions/ObjectNotFoundException.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Exceptions/ObjectNotFoundException.cs new file mode 100644 index 0000000..4e06bee --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Exceptions/ObjectNotFoundException.cs @@ -0,0 +1,20 @@ +using System.Runtime.Serialization; + +namespace ProjectAircraftCarrier_.Exceptions; + +/// +/// Класс, описывающий ошибку, что по указанной позиции нет элемента +/// +[Serializable] +internal class ObjectNotFoundException : ApplicationException +{ + public ObjectNotFoundException(int i) : base("Не найден объект по позиции " + i) { } + + public ObjectNotFoundException() : base() { } + + public ObjectNotFoundException(string message) : base(message) { } + + public ObjectNotFoundException(string message, Exception exception) : base(message, exception) { } + + protected ObjectNotFoundException(SerializationInfo info, StreamingContext contex) : base(info, contex) { } +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Exceptions/PositionOutOfCollectionException.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Exceptions/PositionOutOfCollectionException.cs new file mode 100644 index 0000000..e703193 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Exceptions/PositionOutOfCollectionException.cs @@ -0,0 +1,20 @@ +using System.Runtime.Serialization; + +namespace ProjectAircraftCarrier_.Exceptions; + +/// +/// Класс, описывающий ошибку выхода за границы коллекции +/// +[Serializable] +internal class PositionOutOfCollectionException : ApplicationException +{ + public PositionOutOfCollectionException(int i) : base("Выход за границы коллекции. Позиция " + i) { } + + public PositionOutOfCollectionException() : base() { } + + public PositionOutOfCollectionException(string message) : base(message) { } + + public PositionOutOfCollectionException(string message, Exception exception) : base(message, exception) { } + + protected PositionOutOfCollectionException(SerializationInfo info, StreamingContext contex) : base(info, contex) { } +} diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.Designer.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.Designer.cs index 6bd83ac..e865232 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.Designer.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.Designer.cs @@ -66,9 +66,9 @@ groupBoxTools.Controls.Add(panelStorage); groupBoxTools.Controls.Add(comboBoxSelectorCompany); groupBoxTools.Dock = DockStyle.Right; - groupBoxTools.Location = new Point(1176, 38); + groupBoxTools.Location = new Point(1187, 38); groupBoxTools.Name = "groupBoxTools"; - groupBoxTools.Size = new Size(326, 923); + groupBoxTools.Size = new Size(326, 904); groupBoxTools.TabIndex = 0; groupBoxTools.TabStop = false; groupBoxTools.Text = "Инструменты"; @@ -84,13 +84,13 @@ panelCompanyTools.Enabled = false; panelCompanyTools.Location = new Point(3, 518); panelCompanyTools.Name = "panelCompanyTools"; - panelCompanyTools.Size = new Size(320, 402); + panelCompanyTools.Size = new Size(320, 383); panelCompanyTools.TabIndex = 9; // // buttonAddWarship // buttonAddWarship.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonAddWarship.Location = new Point(3, 14); + buttonAddWarship.Location = new Point(3, 3); buttonAddWarship.Name = "buttonAddWarship"; buttonAddWarship.Size = new Size(314, 72); buttonAddWarship.TabIndex = 1; @@ -100,7 +100,7 @@ // // maskedTextBoxPosition // - maskedTextBoxPosition.Location = new Point(3, 95); + maskedTextBoxPosition.Location = new Point(3, 81); maskedTextBoxPosition.Mask = "00"; maskedTextBoxPosition.Name = "maskedTextBoxPosition"; maskedTextBoxPosition.Size = new Size(314, 35); @@ -110,9 +110,9 @@ // buttonRefresh // buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonRefresh.Location = new Point(3, 292); + buttonRefresh.Location = new Point(3, 304); buttonRefresh.Name = "buttonRefresh"; - buttonRefresh.Size = new Size(314, 72); + buttonRefresh.Size = new Size(314, 70); buttonRefresh.TabIndex = 6; buttonRefresh.Text = "Обновить"; buttonRefresh.UseVisualStyleBackColor = true; @@ -121,9 +121,9 @@ // buttonRemoveWarship // buttonRemoveWarship.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonRemoveWarship.Location = new Point(3, 136); + buttonRemoveWarship.Location = new Point(3, 152); buttonRemoveWarship.Name = "buttonRemoveWarship"; - buttonRemoveWarship.Size = new Size(314, 72); + buttonRemoveWarship.Size = new Size(314, 70); buttonRemoveWarship.TabIndex = 4; buttonRemoveWarship.Text = "Удаление военного корабля"; buttonRemoveWarship.UseVisualStyleBackColor = true; @@ -132,9 +132,9 @@ // buttonGoToCheck // buttonGoToCheck.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - buttonGoToCheck.Location = new Point(3, 214); + buttonGoToCheck.Location = new Point(3, 228); buttonGoToCheck.Name = "buttonGoToCheck"; - buttonGoToCheck.Size = new Size(314, 72); + buttonGoToCheck.Size = new Size(314, 70); buttonGoToCheck.TabIndex = 5; buttonGoToCheck.Text = "Передать на тесты"; buttonGoToCheck.UseVisualStyleBackColor = true; @@ -249,7 +249,7 @@ pictureBox.Dock = DockStyle.Fill; pictureBox.Location = new Point(0, 38); pictureBox.Name = "pictureBox"; - pictureBox.Size = new Size(1176, 923); + pictureBox.Size = new Size(1187, 904); pictureBox.TabIndex = 1; pictureBox.TabStop = false; // @@ -259,7 +259,7 @@ menuStrip.Items.AddRange(new ToolStripItem[] { файлToolStripMenuItem }); menuStrip.Location = new Point(0, 0); menuStrip.Name = "menuStrip"; - menuStrip.Size = new Size(1502, 38); + menuStrip.Size = new Size(1513, 38); menuStrip.TabIndex = 2; menuStrip.Text = "menuStrip"; // @@ -298,7 +298,7 @@ // AutoScaleDimensions = new SizeF(12F, 30F); AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(1502, 961); + ClientSize = new Size(1513, 942); Controls.Add(pictureBox); Controls.Add(groupBoxTools); Controls.Add(menuStrip); diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs index 63e61b7..2f38f58 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/FormWarshipCollection.cs @@ -1,5 +1,8 @@ -using ProjectAircraftCarrier_.CollectionGenericObjects; +using Microsoft.Extensions.Logging; +using ProjectAircraftCarrier_.CollectionGenericObjects; using ProjectAircraftCarrier_.Drawnings; +using ProjectAircraftCarrier_.Exceptions; +using System.Xml.Linq; namespace ProjectAircraftCarrier_; @@ -18,13 +21,19 @@ public partial class FormWarshipCollection : Form /// private AbstractCompany? _company = null; + /// + /// Логер + /// + private readonly ILogger _logger; + /// /// Конструктор /// - public FormWarshipCollection() + public FormWarshipCollection(ILogger logger) { InitializeComponent(); _storageCollection = new(); + _logger = logger; } /// @@ -45,7 +54,6 @@ public partial class FormWarshipCollection : Form private void ButtonAddWarship_Click(object sender, EventArgs e) { FormWarshipConfig form = new(); - // TODO передать метод + form.AddEvent(SetWarship); form.Show(); } @@ -56,19 +64,24 @@ public partial class FormWarshipCollection : Form /// private void SetWarship(DrawningWarship? warship) { - if (_company == null || warship == null) + try { - return; - } + if (_company == null || warship == null) + { + return; + } - if (_company + warship != -1) - { - MessageBox.Show("Объект добавлен"); - pictureBox.Image = _company.Show(); + if (_company + warship != -1) + { + MessageBox.Show("Объект добавлен"); + _logger.LogInformation($"Добавлен объект {warship.GetDataForSave()}"); + pictureBox.Image = _company.Show(); + } } - else + catch (CollectionOverflowException ex) { MessageBox.Show("Не удалось добавить объект"); + _logger.LogWarning($"Ошибка: {ex.Message}"); } } @@ -89,16 +102,27 @@ public partial class FormWarshipCollection : Form return; } - int pos = Convert.ToInt32(maskedTextBoxPosition.Text); - if (_company - pos != null) + try { - MessageBox.Show("Объект удален"); - pictureBox.Image = _company.Show(); + int pos = Convert.ToInt32(maskedTextBoxPosition.Text); + if (_company - pos != null) + { + MessageBox.Show("Объект удален"); + _logger.LogInformation($"Удален объект по позиции {pos}"); + pictureBox.Image = _company.Show(); + } } - else + catch (ObjectNotFoundException ex) { MessageBox.Show("Не удалось удалить объект"); + _logger.LogError($"Ошибка: {ex.Message}"); } + catch (PositionOutOfCollectionException ex) + { + MessageBox.Show("Не удалось удалить объект"); + _logger.LogError($"Ошибка: {ex.Message}"); + } + } /// @@ -162,6 +186,7 @@ public partial class FormWarshipCollection : Form if (string.IsNullOrEmpty(textBoxCollectionName.Text) || (!radioButtonList.Checked && !radioButtonMassive.Checked)) { MessageBox.Show("Не все данные заполнены", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogError("Ошибка: Заполнены не все данные для добавления коллекции"); return; } @@ -176,6 +201,7 @@ public partial class FormWarshipCollection : Form } _storageCollection.AddCollection(textBoxCollectionName.Text, collectionType); + _logger.LogInformation($"Добавлена коллекция: {textBoxCollectionName.Text} типа: {collectionType}"); RerfreshListBoxItems(); } @@ -197,6 +223,7 @@ public partial class FormWarshipCollection : Form return; } _storageCollection.DelCollection(listBoxCollection.SelectedItem.ToString()); + _logger.LogInformation($"Удалена коллекция: {listBoxCollection.SelectedItem.ToString()}"); RerfreshListBoxItems(); } @@ -255,13 +282,16 @@ public partial class FormWarshipCollection : Form { if (saveFileDialog.ShowDialog() == DialogResult.OK) { - if (_storageCollection.SaveData(saveFileDialog.FileName)) + try { + _storageCollection.SaveData(saveFileDialog.FileName); MessageBox.Show("Сохранение прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); + _logger.LogInformation("Сохранение в файл: {filename}", saveFileDialog.FileName); } - else + catch(Exception ex) { - MessageBox.Show("Не сохранилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(ex.Message, "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogError("Ошибка: {Message}", ex.Message); } } } @@ -273,17 +303,19 @@ public partial class FormWarshipCollection : Form /// private void LoadToolStripMenuItem_Click(object sender, EventArgs e) { - // TODO продумать логику if (openFileDialog.ShowDialog() == DialogResult.OK) { - if (_storageCollection.LoadData(openFileDialog.FileName)) + try { + _storageCollection.LoadData(openFileDialog.FileName); MessageBox.Show("Загрузка прошло успешно", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Information); RerfreshListBoxItems(); + _logger.LogInformation("Загрузка из фала: {filename}", openFileDialog.FileName); } - else + catch(Exception ex) { MessageBox.Show("Не загрузилось", "Результат", MessageBoxButtons.OK, MessageBoxIcon.Error); + _logger.LogError("Ошибка: {Message}", ex.Message); } } } diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Program.cs b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Program.cs index 332bbfa..d8c8ee2 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Program.cs +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/Program.cs @@ -1,3 +1,8 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.DependencyInjection; +using Serilog; + namespace ProjectAircraftCarrier_ { internal static class Program @@ -11,7 +16,31 @@ namespace ProjectAircraftCarrier_ // To customize application configuration such as set high DPI settings or default font, // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - Application.Run(new FormWarshipCollection()); + + ServiceCollection services = new(); + ConfigureServices(services); + using ServiceProvider serviceProvider = services.BuildServiceProvider(); + Application.Run(serviceProvider.GetRequiredService()); + } + + /// + /// DI + /// + /// + private static void ConfigureServices(ServiceCollection services) + { + services + .AddSingleton() + .AddLogging(option => + { + option.SetMinimumLevel(LogLevel.Information); + var config = new ConfigurationBuilder() + .AddJsonFile("serilogConfig.json", optional: false, reloadOnChange: true) + .Build(); + option.AddSerilog(Log.Logger = new LoggerConfiguration() + .ReadFrom.Configuration(config) + .CreateLogger()); + }); } } } \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/ProjectAircraftCarrier_.csproj b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/ProjectAircraftCarrier_.csproj index af03d74..621f7b2 100644 --- a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/ProjectAircraftCarrier_.csproj +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/ProjectAircraftCarrier_.csproj @@ -8,6 +8,18 @@ enable + + + + + + + + + + + + True @@ -23,4 +35,10 @@ + + + Always + + + \ No newline at end of file diff --git a/ProjectAircraftCarrier_/ProjectAircraftCarrier_/serilogConfig.json b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/serilogConfig.json new file mode 100644 index 0000000..18d6939 --- /dev/null +++ b/ProjectAircraftCarrier_/ProjectAircraftCarrier_/serilogConfig.json @@ -0,0 +1,25 @@ +{ + "AllowedHosts": "*", + "Serilog": { + "Using": [ "Serilog.Sinks.File", "Serilog.Sinks.Console" ], + "MinimumLevel": { + "Default": "Information", + "Override": { + "Microsoft": "Warning", + "System": "Warning" + } + }, + "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ], + "WriteTo": [ + { "Name": "Console" }, + { + "Name": "File", + "Args": { + "path": "C:\\Users\\Андрей\\OneDrive\\Рабочий стол\\уник\\ООП\\log.txt", + "rollingInterval": "Day", + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.ffff} | {Level:u} | {SourceContext} | {Message:1j}{NewLine}{Exception}" + } + } + ] + } +} \ No newline at end of file