From 86ae2820547aea187be7ab03cfd26fa0a92ae1cf Mon Sep 17 00:00:00 2001 From: kamilia Date: Wed, 22 May 2024 00:13:58 +0400 Subject: [PATCH 1/6] =?UTF-8?q?=D0=BD=D1=83=20=D0=B8=20=D0=BA=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D0=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AircraftPlantListImplement.csproj | 4 + .../AbstractShopListImplement/BackUpInfo.cs | 21 ++++ .../ImplementationExtension.cs | 27 +++++ .../ListImplementationExtension.cs | 26 +++++ .../AbstractShopListImplement/Message.cs | 1 + .../BusinessLogics/BackUpLogic.cs | 101 ++++++++++++++++++ .../AircraftPlantContracts.csproj | 2 + .../Attributes/ColumnAttribute.cs | 28 +++++ .../Attributes/GridViewAutoSize.cs | 20 ++++ .../BindingModels/BackUpSaveBindingModel.cs | 13 +++ .../BindingModels/MessageInfoBindingModel.cs | 1 + .../BusinessLogicsContracts/IBackUpLogic.cs | 14 +++ .../DI/DependencyManager.cs | 69 ++++++++++++ .../DI/IDependencyContainer.cs | 38 +++++++ .../DI/IImplementationExtension.cs | 20 ++++ .../DI/ServiceDependencyContainer.cs | 62 +++++++++++ .../DI/ServiceProviderLoader.cs | 58 ++++++++++ .../DI/UnityDependencyContainer.cs | 42 ++++++++ .../StoragesContracts/IBackUpInfo.cs | 14 +++ .../ViewModels/ClientViewModel.cs | 14 +-- .../ViewModels/ComponentViewModel.cs | 8 +- .../ViewModels/ImplementerViewModel.cs | 12 ++- .../ViewModels/MessageInfoViewModel.cs | 21 +++- .../ViewModels/OrderViewModel.cs | 31 ++++-- .../ViewModels/PlaneViewModel.cs | 9 +- .../IMessageInfoModel.cs | 2 +- .../AircraftPlantDatabaseImplement.csproj | 4 + .../ImplementationExtension.cs | 27 +++++ .../Implements/BackUpInfo.cs | 32 ++++++ .../Models/Client.cs | 6 ++ .../Models/Component.cs | 5 + .../Models/Implementer.cs | 11 ++ .../Models/Message.cs | 16 +++ .../Models/Order.cs | 12 +++ .../Models/Plane.cs | 9 ++ .../AircraftPlantFileImplement.csproj | 4 + .../AircraftPlantFileImplement/BackUpInfo.cs | 44 ++++++++ .../AircraftPlantFileImplement/Client.cs | 6 ++ .../AircraftPlantFileImplement/Component.cs | 13 ++- .../ImplementationExtension.cs | 27 +++++ .../AircraftPlantFileImplement/Implementer.cs | 7 ++ .../AircraftPlantFileImplement/Message.cs | 10 ++ .../AircraftPlantFileImplement/Order.cs | 11 ++ .../AircraftPlantFileImplement/Plane.cs | 9 +- .../DataGridViewExtension.cs | 55 ++++++++++ .../AircraftPlantView/FormClients.cs | 9 +- .../AircraftPlantView/FormComponents.cs | 25 ++--- .../AircraftPlantView/FormImplementers.cs | 8 +- AircraftPlant/AircraftPlantView/FormMails.cs | 9 +- .../AircraftPlantView/FormMain.Designer.cs | 14 ++- AircraftPlant/AircraftPlantView/FormMain.cs | 96 ++++++++--------- AircraftPlant/AircraftPlantView/FormPlane.cs | 58 +++++----- AircraftPlant/AircraftPlantView/FormPlanes.cs | 30 ++---- AircraftPlant/AircraftPlantView/Program.cs | 79 +++++++------- .../AircraftPlantContracts.dll | Bin 0 -> 31744 bytes .../AircraftPlantDataModels.dll | Bin 0 -> 6656 bytes .../AircraftPlantDatabaseImplement.dll | Bin 0 -> 83968 bytes .../AircraftPlantFileImplement.dll | Bin 0 -> 41984 bytes .../AircraftPlantListImplement.dll | Bin 0 -> 27136 bytes 59 files changed, 1067 insertions(+), 227 deletions(-) create mode 100644 AircraftPlant/AbstractShopListImplement/BackUpInfo.cs create mode 100644 AircraftPlant/AbstractShopListImplement/ImplementationExtension.cs create mode 100644 AircraftPlant/AbstractShopListImplement/ListImplementationExtension.cs create mode 100644 AircraftPlant/AircraftPlantBusinessLogic/BusinessLogics/BackUpLogic.cs create mode 100644 AircraftPlant/AircraftPlantContracts»/Attributes/ColumnAttribute.cs create mode 100644 AircraftPlant/AircraftPlantContracts»/Attributes/GridViewAutoSize.cs create mode 100644 AircraftPlant/AircraftPlantContracts»/BindingModels/BackUpSaveBindingModel.cs create mode 100644 AircraftPlant/AircraftPlantContracts»/BusinessLogicsContracts/IBackUpLogic.cs create mode 100644 AircraftPlant/AircraftPlantContracts»/DI/DependencyManager.cs create mode 100644 AircraftPlant/AircraftPlantContracts»/DI/IDependencyContainer.cs create mode 100644 AircraftPlant/AircraftPlantContracts»/DI/IImplementationExtension.cs create mode 100644 AircraftPlant/AircraftPlantContracts»/DI/ServiceDependencyContainer.cs create mode 100644 AircraftPlant/AircraftPlantContracts»/DI/ServiceProviderLoader.cs create mode 100644 AircraftPlant/AircraftPlantContracts»/DI/UnityDependencyContainer.cs create mode 100644 AircraftPlant/AircraftPlantContracts»/StoragesContracts/IBackUpInfo.cs create mode 100644 AircraftPlant/AircraftPlantDatabaseImplement/ImplementationExtension.cs create mode 100644 AircraftPlant/AircraftPlantDatabaseImplement/Implements/BackUpInfo.cs create mode 100644 AircraftPlant/AircraftPlantFileImplement/BackUpInfo.cs create mode 100644 AircraftPlant/AircraftPlantFileImplement/ImplementationExtension.cs create mode 100644 AircraftPlant/AircraftPlantView/DataGridViewExtension.cs create mode 100644 AircraftPlant/ImplementationExtensions/AircraftPlantContracts.dll create mode 100644 AircraftPlant/ImplementationExtensions/AircraftPlantDataModels.dll create mode 100644 AircraftPlant/ImplementationExtensions/AircraftPlantDatabaseImplement.dll create mode 100644 AircraftPlant/ImplementationExtensions/AircraftPlantFileImplement.dll create mode 100644 AircraftPlant/ImplementationExtensions/AircraftPlantListImplement.dll diff --git a/AircraftPlant/AbstractShopListImplement/AircraftPlantListImplement.csproj b/AircraftPlant/AbstractShopListImplement/AircraftPlantListImplement.csproj index 9d5c14b..bd4cea7 100644 --- a/AircraftPlant/AbstractShopListImplement/AircraftPlantListImplement.csproj +++ b/AircraftPlant/AbstractShopListImplement/AircraftPlantListImplement.csproj @@ -15,4 +15,8 @@ + + + + diff --git a/AircraftPlant/AbstractShopListImplement/BackUpInfo.cs b/AircraftPlant/AbstractShopListImplement/BackUpInfo.cs new file mode 100644 index 0000000..5e74482 --- /dev/null +++ b/AircraftPlant/AbstractShopListImplement/BackUpInfo.cs @@ -0,0 +1,21 @@ +using AircraftPlantContracts.StoragesContracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantListImplement +{ + public class BackUpInfo : IBackUpInfo + { + public List? GetList() where T : class, new() + { + throw new NotImplementedException(); + } + public Type? GetTypeByModelInterface(string modelInterfaceName) + { + throw new NotImplementedException(); + } + } +} diff --git a/AircraftPlant/AbstractShopListImplement/ImplementationExtension.cs b/AircraftPlant/AbstractShopListImplement/ImplementationExtension.cs new file mode 100644 index 0000000..315dd04 --- /dev/null +++ b/AircraftPlant/AbstractShopListImplement/ImplementationExtension.cs @@ -0,0 +1,27 @@ +using AircraftPlantContracts.DI; +using AircraftPlantContracts.StoragesContracts; +using AircraftPlantListImplement.Implements; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantListImplement +{ + public class ImplementationExtension : IImplementationExtension + { + public int Priority => 0; + + public void RegisterServices() + { + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + } + } +} diff --git a/AircraftPlant/AbstractShopListImplement/ListImplementationExtension.cs b/AircraftPlant/AbstractShopListImplement/ListImplementationExtension.cs new file mode 100644 index 0000000..69958c2 --- /dev/null +++ b/AircraftPlant/AbstractShopListImplement/ListImplementationExtension.cs @@ -0,0 +1,26 @@ +using AircraftPlantContracts.DI; +using AircraftPlantContracts.StoragesContracts; +using AircraftPlantListImplement.Implements; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantListImplement +{ + public class ListImplementationExtension : IImplementationExtension + { + public int Priority => 0; + public void RegisterServices() + { + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + } + } +} \ No newline at end of file diff --git a/AircraftPlant/AbstractShopListImplement/Message.cs b/AircraftPlant/AbstractShopListImplement/Message.cs index 0a6857f..ec1cfc0 100644 --- a/AircraftPlant/AbstractShopListImplement/Message.cs +++ b/AircraftPlant/AbstractShopListImplement/Message.cs @@ -17,6 +17,7 @@ namespace AircraftPlantListImplement public DateTime DateDelivery { get; set; } public string Subject { get; set; } = string.Empty; public string Body { get; set; } = string.Empty; + public int Id => throw new NotImplementedException(); public static Message? Create(MessageInfoBindingModel model) { if (model == null) diff --git a/AircraftPlant/AircraftPlantBusinessLogic/BusinessLogics/BackUpLogic.cs b/AircraftPlant/AircraftPlantBusinessLogic/BusinessLogics/BackUpLogic.cs new file mode 100644 index 0000000..8ce736e --- /dev/null +++ b/AircraftPlant/AircraftPlantBusinessLogic/BusinessLogics/BackUpLogic.cs @@ -0,0 +1,101 @@ +using AircraftPlantContracts.BindingModels; +using AircraftPlantContracts.BusinessLogicsContracts; +using AircraftPlantContracts.StoragesContracts; +using AircraftPlantDataModels; +using DocumentFormat.OpenXml.EMMA; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.IO.Compression; +using System.Linq; +using System.Reflection; +using System.Runtime.Serialization.Json; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantBusinessLogic.BusinessLogics +{ + public class BackUpLogic : IBackUpLogic + { + private readonly ILogger _logger; + private readonly IBackUpInfo _backUpInfo; + public BackUpLogic(ILogger logger, IBackUpInfo backUpInfo) + { + _logger = logger; + _backUpInfo = backUpInfo; + } + public void CreateBackUp(BackUpSaveBindingModel model) + { + if (_backUpInfo == null) + { + return; + } + try + { + _logger.LogDebug("Clear folder"); + // зачистка папки и удаление старого архива + var dirInfo = new DirectoryInfo(model.FolderName); + if (dirInfo.Exists) + { + foreach (var file in dirInfo.GetFiles()) + { + file.Delete(); + } + } + _logger.LogDebug("Delete archive"); + string fileName = $"{model.FolderName}.zip"; + if (File.Exists(fileName)) + { + File.Delete(fileName); + } + // берем метод для сохранения + _logger.LogDebug("Get assembly"); + var typeIId = typeof(IId); + var assembly = typeIId.Assembly; + if (assembly == null) + { + throw new ArgumentNullException("Сборка не найдена", nameof(assembly)); + } + var types = assembly.GetTypes(); + var method = GetType().GetMethod("SaveToFile", BindingFlags.NonPublic | BindingFlags.Instance); + _logger.LogDebug("Find {count} types", types.Length); + foreach (var type in types) + { + if (type.IsInterface && type.GetInterface(typeIId.Name) != null) + { + var modelType = + _backUpInfo.GetTypeByModelInterface(type.Name); + if (modelType == null) + { + throw new InvalidOperationException($"Не найден класс - модель для { type.Name }"); + } + _logger.LogDebug("Call SaveToFile method for {name} type", type.Name); + // вызываем метод на выполнение + method?.MakeGenericMethod(modelType).Invoke(this, new object[] { model.FolderName }); + } + } + _logger.LogDebug("Create zip and remove folder"); + // архивируем + ZipFile.CreateFromDirectory(model.FolderName, fileName); + // удаляем папку + dirInfo.Delete(true); + } + catch (Exception) + { + throw; + } + } + private void SaveToFile(string folderName) where T : class, new() + { + var records = _backUpInfo.GetList(); + if (records == null) + { + _logger.LogWarning("{type} type get null list", typeof(T).Name); + return; + } + var jsonFormatter = new DataContractJsonSerializer(typeof(List)); + using var fs = new FileStream(string.Format("{0}/{1}.json", folderName, typeof(T).Name), FileMode.OpenOrCreate); + jsonFormatter.WriteObject(fs, records); + } + } +} diff --git a/AircraftPlant/AircraftPlantContracts»/AircraftPlantContracts.csproj b/AircraftPlant/AircraftPlantContracts»/AircraftPlantContracts.csproj index d2377af..8cd3cf0 100644 --- a/AircraftPlant/AircraftPlantContracts»/AircraftPlantContracts.csproj +++ b/AircraftPlant/AircraftPlantContracts»/AircraftPlantContracts.csproj @@ -9,6 +9,8 @@ + + diff --git a/AircraftPlant/AircraftPlantContracts»/Attributes/ColumnAttribute.cs b/AircraftPlant/AircraftPlantContracts»/Attributes/ColumnAttribute.cs new file mode 100644 index 0000000..c5a057f --- /dev/null +++ b/AircraftPlant/AircraftPlantContracts»/Attributes/ColumnAttribute.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantContracts.Attributes +{ + [AttributeUsage(AttributeTargets.Property)] + public class ColumnAttribute : Attribute + { + public ColumnAttribute(string title = "", bool visible = true, int width + = 0, GridViewAutoSize gridViewAutoSize = GridViewAutoSize.None, bool + isUseAutoSize = false) + { + Title = title; + Visible = visible; + Width = width; + GridViewAutoSize = gridViewAutoSize; + IsUseAutoSize = isUseAutoSize; + } + public string Title { get; private set; } + public bool Visible { get; private set; } + public int Width { get; private set; } + public GridViewAutoSize GridViewAutoSize { get; private set; } + public bool IsUseAutoSize { get; private set; } + } +} diff --git a/AircraftPlant/AircraftPlantContracts»/Attributes/GridViewAutoSize.cs b/AircraftPlant/AircraftPlantContracts»/Attributes/GridViewAutoSize.cs new file mode 100644 index 0000000..4a95eed --- /dev/null +++ b/AircraftPlant/AircraftPlantContracts»/Attributes/GridViewAutoSize.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantContracts.Attributes +{ + public enum GridViewAutoSize + { + NotSet = 0, + None = 1, + ColumnHeader = 2, + AllCellsExceptHeader = 4, + AllCells = 6, + DisplayedCellsExceptHeader = 8, + DisplayedCells = 10, + Fill = 16 + } +} diff --git a/AircraftPlant/AircraftPlantContracts»/BindingModels/BackUpSaveBindingModel.cs b/AircraftPlant/AircraftPlantContracts»/BindingModels/BackUpSaveBindingModel.cs new file mode 100644 index 0000000..268bed3 --- /dev/null +++ b/AircraftPlant/AircraftPlantContracts»/BindingModels/BackUpSaveBindingModel.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantContracts.BindingModels +{ + public class BackUpSaveBindingModel + { + public string FolderName { get; set; } = string.Empty; + } +} diff --git a/AircraftPlant/AircraftPlantContracts»/BindingModels/MessageInfoBindingModel.cs b/AircraftPlant/AircraftPlantContracts»/BindingModels/MessageInfoBindingModel.cs index 538624b..2fe6c80 100644 --- a/AircraftPlant/AircraftPlantContracts»/BindingModels/MessageInfoBindingModel.cs +++ b/AircraftPlant/AircraftPlantContracts»/BindingModels/MessageInfoBindingModel.cs @@ -15,5 +15,6 @@ namespace AircraftPlantContracts.BindingModels public DateTime DateDelivery { get; set; } public string Subject { get; set; } = string.Empty; public string Body { get; set; } = string.Empty; + public int Id => throw new NotImplementedException(); } } diff --git a/AircraftPlant/AircraftPlantContracts»/BusinessLogicsContracts/IBackUpLogic.cs b/AircraftPlant/AircraftPlantContracts»/BusinessLogicsContracts/IBackUpLogic.cs new file mode 100644 index 0000000..07f2932 --- /dev/null +++ b/AircraftPlant/AircraftPlantContracts»/BusinessLogicsContracts/IBackUpLogic.cs @@ -0,0 +1,14 @@ +using AircraftPlantContracts.BindingModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantContracts.BusinessLogicsContracts +{ + public interface IBackUpLogic + { + void CreateBackUp(BackUpSaveBindingModel model); + } +} diff --git a/AircraftPlant/AircraftPlantContracts»/DI/DependencyManager.cs b/AircraftPlant/AircraftPlantContracts»/DI/DependencyManager.cs new file mode 100644 index 0000000..3ee41f9 --- /dev/null +++ b/AircraftPlant/AircraftPlantContracts»/DI/DependencyManager.cs @@ -0,0 +1,69 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantContracts.DI +{ + /// + /// Менеджер для работы с зависимостями + /// + public class DependencyManager + { + private readonly IDependencyContainer _dependencyManager; + + private static DependencyManager? _manager; + + private static readonly object _locjObject = new(); + + private DependencyManager() + { + _dependencyManager = new ServiceDependencyContainer(); + } + + public static DependencyManager Instance { get { if (_manager == null) { lock (_locjObject) { _manager = new DependencyManager(); } } return _manager; } } + + /// + /// Иницализация библиотек, в которых идут установки зависомстей + /// + public static void InitDependency() + { + var ext = ServiceProviderLoader.GetImplementationExtensions(); + if (ext == null) + { + throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей по модулям"); + } + // регистрируем зависимости + ext.RegisterServices(); + } + + /// + /// Регистрация логгера + /// + /// + public void AddLogging(Action configure) => _dependencyManager.AddLogging(configure); + + /// + /// Добавление зависимости + /// + /// + /// + public void RegisterType(bool isSingle = false) where U : class, T where T : class => _dependencyManager.RegisterType(isSingle); + + /// + /// Добавление зависимости + /// + /// + /// + public void RegisterType(bool isSingle = false) where T : class => _dependencyManager.RegisterType(isSingle); + + /// + /// Получение класса со всеми зависмостями + /// + /// + /// + public T Resolve() => _dependencyManager.Resolve(); + } +} \ No newline at end of file diff --git a/AircraftPlant/AircraftPlantContracts»/DI/IDependencyContainer.cs b/AircraftPlant/AircraftPlantContracts»/DI/IDependencyContainer.cs new file mode 100644 index 0000000..2c453ba --- /dev/null +++ b/AircraftPlant/AircraftPlantContracts»/DI/IDependencyContainer.cs @@ -0,0 +1,38 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantContracts.DI +{ + public interface IDependencyContainer + { + /// + /// Регистрация логгера + /// + /// + void AddLogging(Action configure); + /// + /// Добавление зависимости + /// + /// + /// + /// + void RegisterType(bool isSingle) where U : class, T where T : + class; + /// + /// Добавление зависимости + /// + /// + /// + void RegisterType(bool isSingle) where T : class; + /// + /// Получение класса со всеми зависмостями + /// + /// + /// + T Resolve(); + } +} diff --git a/AircraftPlant/AircraftPlantContracts»/DI/IImplementationExtension.cs b/AircraftPlant/AircraftPlantContracts»/DI/IImplementationExtension.cs new file mode 100644 index 0000000..cf5d667 --- /dev/null +++ b/AircraftPlant/AircraftPlantContracts»/DI/IImplementationExtension.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantContracts.DI +{ + /// + /// Интерфейс для регистрации зависимостей в модулях + /// + public interface IImplementationExtension + { + public int Priority { get; } + /// + /// Регистрация сервисов + /// + public void RegisterServices(); + } +} diff --git a/AircraftPlant/AircraftPlantContracts»/DI/ServiceDependencyContainer.cs b/AircraftPlant/AircraftPlantContracts»/DI/ServiceDependencyContainer.cs new file mode 100644 index 0000000..0bc57a9 --- /dev/null +++ b/AircraftPlant/AircraftPlantContracts»/DI/ServiceDependencyContainer.cs @@ -0,0 +1,62 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantContracts.DI +{ + public class ServiceDependencyContainer : IDependencyContainer + { + private ServiceProvider? _serviceProvider; + + private readonly ServiceCollection _serviceCollection; + + public ServiceDependencyContainer() + { + _serviceCollection = new ServiceCollection(); + } + + public void AddLogging(Action configure) + { + _serviceCollection.AddLogging(configure); + } + + public void RegisterType(bool isSingle) where U : class, T where T : class + { + if (isSingle) + { + _serviceCollection.AddSingleton(); + } + else + { + _serviceCollection.AddTransient(); + } + _serviceProvider = null; + } + + public void RegisterType(bool isSingle) where T : class + { + if (isSingle) + { + _serviceCollection.AddSingleton(); + } + else + { + _serviceCollection.AddTransient(); + } + _serviceProvider = null; + } + + public T Resolve() + { + if (_serviceProvider == null) + { + _serviceProvider = _serviceCollection.BuildServiceProvider(); + } + return _serviceProvider.GetService()!; + } + } +} diff --git a/AircraftPlant/AircraftPlantContracts»/DI/ServiceProviderLoader.cs b/AircraftPlant/AircraftPlantContracts»/DI/ServiceProviderLoader.cs new file mode 100644 index 0000000..a28d4d4 --- /dev/null +++ b/AircraftPlant/AircraftPlantContracts»/DI/ServiceProviderLoader.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantContracts.DI +{ + /// + /// Загрузчик данных + /// + public class ServiceProviderLoader + { + /// + /// Загрузка всех классов-реализаций IImplementationExtension + /// + /// + public static IImplementationExtension? GetImplementationExtensions() + { + IImplementationExtension? source = null; + var files = Directory.GetFiles(TryGetImplementationExtensionsFolder(), "*.dll", SearchOption.AllDirectories); + foreach (var file in files.Distinct()) + { + Assembly asm = Assembly.LoadFrom(file); + foreach (var t in asm.GetExportedTypes()) + { + if (t.IsClass && typeof(IImplementationExtension).IsAssignableFrom(t)) + { + if (source == null) + { + source = (IImplementationExtension)Activator.CreateInstance(t)!; + } + else + { + var newSource = (IImplementationExtension)Activator.CreateInstance(t)!; + if (newSource.Priority > source.Priority) + { + source = newSource; + } + } + } + } + } + return source; + } + + private static string TryGetImplementationExtensionsFolder() + { + var directory = new DirectoryInfo(Directory.GetCurrentDirectory()); + while (directory != null && !directory.GetDirectories("ImplementationExtensions", SearchOption.AllDirectories).Any(x => x.Name == "ImplementationExtensions")) + { + directory = directory.Parent; + } + return $"{directory?.FullName}\\ImplementationExtensions"; + } + } +} \ No newline at end of file diff --git a/AircraftPlant/AircraftPlantContracts»/DI/UnityDependencyContainer.cs b/AircraftPlant/AircraftPlantContracts»/DI/UnityDependencyContainer.cs new file mode 100644 index 0000000..ca64ab0 --- /dev/null +++ b/AircraftPlant/AircraftPlantContracts»/DI/UnityDependencyContainer.cs @@ -0,0 +1,42 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Unity.Microsoft.Logging; +using Unity; + +namespace AircraftPlantContracts.DI +{ + public class UnityDependencyContainer : IDependencyContainer + { + private readonly IUnityContainer _container; + + public UnityDependencyContainer() + { + _container = new UnityContainer(); + } + + public void AddLogging(Action configure) + { + var factory = LoggerFactory.Create(configure); + _container.AddExtension(new LoggingExtension(factory)); + } + + public void RegisterType(bool isSingle) where U : class, T where T : class + { + _container.RegisterType(isSingle ? TypeLifetime.Singleton : TypeLifetime.Transient); + } + + public void RegisterType(bool isSingle) where T : class + { + _container.RegisterType(isSingle ? TypeLifetime.Singleton : TypeLifetime.Transient); + } + + public T Resolve() + { + return _container.Resolve(); + } + } +} \ No newline at end of file diff --git a/AircraftPlant/AircraftPlantContracts»/StoragesContracts/IBackUpInfo.cs b/AircraftPlant/AircraftPlantContracts»/StoragesContracts/IBackUpInfo.cs new file mode 100644 index 0000000..7e98b6d --- /dev/null +++ b/AircraftPlant/AircraftPlantContracts»/StoragesContracts/IBackUpInfo.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantContracts.StoragesContracts +{ + public interface IBackUpInfo + { + List? GetList() where T : class, new(); + Type? GetTypeByModelInterface(string modelInterfaceName); + } +} diff --git a/AircraftPlant/AircraftPlantContracts»/ViewModels/ClientViewModel.cs b/AircraftPlant/AircraftPlantContracts»/ViewModels/ClientViewModel.cs index 5472026..587a7aa 100644 --- a/AircraftPlant/AircraftPlantContracts»/ViewModels/ClientViewModel.cs +++ b/AircraftPlant/AircraftPlantContracts»/ViewModels/ClientViewModel.cs @@ -1,4 +1,5 @@ -using AircraftPlantDataModels; +using AircraftPlantContracts.Attributes; +using AircraftPlantDataModels; using System; using System.Collections.Generic; using System.ComponentModel; @@ -10,12 +11,13 @@ namespace AircraftPlantContracts.ViewModels { public class ClientViewModel : IClientModel { - public int Id { get; set; } - [DisplayName("ФИО клиента")] - public string ClientFIO { get; set; } = string.Empty; - [DisplayName("Логин (эл. почта)")] + [Column(visible: false)] + public int Id { get; set; } + [Column(title: "ФИО клиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] + public string ClientFIO { get; set; } = string.Empty; + [Column(title: "Логин (эл. почта)", width: 150)] public string Email { get; set; } = string.Empty; - [DisplayName("Пароль")] + [Column(title: "Пароль", width: 150)] public string Password { get; set; } = string.Empty; } } diff --git a/AircraftPlant/AircraftPlantContracts»/ViewModels/ComponentViewModel.cs b/AircraftPlant/AircraftPlantContracts»/ViewModels/ComponentViewModel.cs index 0e24d67..e18cec6 100644 --- a/AircraftPlant/AircraftPlantContracts»/ViewModels/ComponentViewModel.cs +++ b/AircraftPlant/AircraftPlantContracts»/ViewModels/ComponentViewModel.cs @@ -1,4 +1,5 @@ -using AircraftPlantDataModels.Models; +using AircraftPlantContracts.Attributes; +using AircraftPlantDataModels.Models; using System; using System.Collections.Generic; using System.ComponentModel; @@ -10,10 +11,11 @@ namespace AircraftPlantContracts.ViewModels { public class ComponentViewModel : IComponentModel { + [Column(visible: false)] public int Id { get; set; } - [DisplayName("Название компонента")] + [Column(title: "Компонент", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string ComponentName { get; set; } = string.Empty; - [DisplayName("Цена")] + [Column(title: "Цена", width: 150)] public double Cost { get; set; } } } diff --git a/AircraftPlant/AircraftPlantContracts»/ViewModels/ImplementerViewModel.cs b/AircraftPlant/AircraftPlantContracts»/ViewModels/ImplementerViewModel.cs index 5a96ee4..712f169 100644 --- a/AircraftPlant/AircraftPlantContracts»/ViewModels/ImplementerViewModel.cs +++ b/AircraftPlant/AircraftPlantContracts»/ViewModels/ImplementerViewModel.cs @@ -1,4 +1,5 @@ -using AircraftPlantDataModels; +using AircraftPlantContracts.Attributes; +using AircraftPlantDataModels; using System; using System.Collections.Generic; using System.ComponentModel; @@ -10,14 +11,15 @@ namespace AircraftPlantContracts.ViewModels { public class ImplementerViewModel : IImplementerModel { + [Column(visible: false)] public int Id { get; set; } - [DisplayName("ФИО исполнителя")] + [Column(title: "ФИО исполнителя", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string ImplementerFIO { get; set; } = string.Empty; - [DisplayName("Пароль")] + [Column(title: "Пароль", width: 100)] public string Password { get; set; } = string.Empty; - [DisplayName("Опыт работы")] + [Column(title: "Стаж работы", width: 150)] public int WorkExperience { get; set; } - [DisplayName("Квалификация")] + [Column(title: "Квалификация", width: 150)] public int Qualification { get; set; } } } diff --git a/AircraftPlant/AircraftPlantContracts»/ViewModels/MessageInfoViewModel.cs b/AircraftPlant/AircraftPlantContracts»/ViewModels/MessageInfoViewModel.cs index b5c4d0c..49a07c8 100644 --- a/AircraftPlant/AircraftPlantContracts»/ViewModels/MessageInfoViewModel.cs +++ b/AircraftPlant/AircraftPlantContracts»/ViewModels/MessageInfoViewModel.cs @@ -1,4 +1,5 @@ -using AircraftPlantDataModels; +using AircraftPlantContracts.Attributes; +using AircraftPlantDataModels; using System; using System.Collections.Generic; using System.ComponentModel; @@ -10,15 +11,25 @@ namespace AircraftPlantContracts.ViewModels { public class MessageInfoViewModel : IMessageInfoModel { + [Column(visible: false)] + public int Id { get; set; } + + [Column(visible: false)] public string MessageId { get; set; } = string.Empty; + + [Column(visible: false)] public int? ClientId { get; set; } - [DisplayName("Отправитель")] + + [Column(title: "Отправитель", width: 150)] public string SenderName { get; set; } = string.Empty; - [DisplayName("Дата письма")] + + [Column(title: "Дата письма", width: 120)] public DateTime DateDelivery { get; set; } - [DisplayName("Заголовок")] + + [Column(title: "Заголовок", width: 120)] public string Subject { get; set; } = string.Empty; - [DisplayName("Текст")] + + [Column(title: "Текст", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string Body { get; set; } = string.Empty; } } \ No newline at end of file diff --git a/AircraftPlant/AircraftPlantContracts»/ViewModels/OrderViewModel.cs b/AircraftPlant/AircraftPlantContracts»/ViewModels/OrderViewModel.cs index 62c76af..a2e2e4a 100644 --- a/AircraftPlant/AircraftPlantContracts»/ViewModels/OrderViewModel.cs +++ b/AircraftPlant/AircraftPlantContracts»/ViewModels/OrderViewModel.cs @@ -6,6 +6,7 @@ using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; +using AircraftPlantContracts.Attributes; namespace AircraftPlantContracts.ViewModels { @@ -18,69 +19,77 @@ namespace AircraftPlantContracts.ViewModels /// /// Идентификатор /// - [DisplayName("Номер")] + [Column(title: "Номер", width: 90)] public int Id { get; set; } /// /// Идентификатор изделия /// + [Column(visible: false)] public int PlaneId { get; set; } - /// /// Название изделия /// - [DisplayName("Изделие")] + [Column(title: "Изделие", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string PlaneName { get; set; } = string.Empty; /// /// Идентификатор клиента /// + [Column(visible: false)] public int ClientId { get; set; } /// /// ФИО клиента /// - [DisplayName("ФИО клиента")] + [Column(title: "Имя клиента", width: 190)] public string ClientFIO { get; set; } = string.Empty; + /// + /// Email клиента + /// + [Column(visible: false)] + public string ClientEmail { get; set; } = string.Empty; + /// /// Идентификатор исполнителя /// + [Column(visible: false)] public int? ImplementerId { get; set; } /// /// ФИО исполнителя /// - [DisplayName("ФИО исполнителя")] - public string ImplementerFIO { get; set; } = string.Empty; + [Column(title: "ФИО исполнителя", width: 150)] + public string? ImplementerFIO { get; set; } = null; /// /// Количество изделий /// - [DisplayName("Количество")] + [Column(title: "Количество", width: 100)] public int Count { get; set; } /// /// Сумма заказа /// - [DisplayName("Сумма")] + [Column(title: "Сумма", width: 120)] public double Sum { get; set; } /// /// Статус заказа /// - [DisplayName("Статус")] + [Column(title: "Статус", width: 70)] public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; /// /// Дата создания заказа /// - [DisplayName("Дата создания")] + [Column(title: "Дата создания", width: 120)] public DateTime DateCreate { get; set; } = DateTime.Now; /// /// Дата выполнения заказа /// - [DisplayName("Дата выполнения")] + [Column(title: "Дата выполнения", width: 120)] public DateTime? DateImplement { get; set; } } } diff --git a/AircraftPlant/AircraftPlantContracts»/ViewModels/PlaneViewModel.cs b/AircraftPlant/AircraftPlantContracts»/ViewModels/PlaneViewModel.cs index 0e60ba4..60397cd 100644 --- a/AircraftPlant/AircraftPlantContracts»/ViewModels/PlaneViewModel.cs +++ b/AircraftPlant/AircraftPlantContracts»/ViewModels/PlaneViewModel.cs @@ -1,4 +1,5 @@ -using AircraftPlantDataModels.Models; +using AircraftPlantContracts.Attributes; +using AircraftPlantDataModels.Models; using System; using System.Collections.Generic; using System.ComponentModel; @@ -17,23 +18,25 @@ namespace AircraftPlantContracts.ViewModels /// /// Идентификатор /// + [Column(visible: false)] public int Id { get; set; } /// /// Название изделия /// - [DisplayName("Название изделия")] + [Column(title: "Название изделия", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string PlaneName { get; set; } = string.Empty; /// /// Стоимость изделия /// - [DisplayName("Цена")] + [Column(title: "Цена", width: 70)] public double Price { get; set; } /// /// Коллекция компонентов изделия /// + [Column(visible: false)] public Dictionary PlaneComponents { get; diff --git a/AircraftPlant/AircraftPlantDataModels/IMessageInfoModel.cs b/AircraftPlant/AircraftPlantDataModels/IMessageInfoModel.cs index 10c0535..1a9f3c7 100644 --- a/AircraftPlant/AircraftPlantDataModels/IMessageInfoModel.cs +++ b/AircraftPlant/AircraftPlantDataModels/IMessageInfoModel.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace AircraftPlantDataModels { - public interface IMessageInfoModel + public interface IMessageInfoModel : IId { string MessageId { get; } int? ClientId { get; } diff --git a/AircraftPlant/AircraftPlantDatabaseImplement/AircraftPlantDatabaseImplement.csproj b/AircraftPlant/AircraftPlantDatabaseImplement/AircraftPlantDatabaseImplement.csproj index 03cd680..586e3bb 100644 --- a/AircraftPlant/AircraftPlantDatabaseImplement/AircraftPlantDatabaseImplement.csproj +++ b/AircraftPlant/AircraftPlantDatabaseImplement/AircraftPlantDatabaseImplement.csproj @@ -20,6 +20,10 @@ + + + + diff --git a/AircraftPlant/AircraftPlantDatabaseImplement/ImplementationExtension.cs b/AircraftPlant/AircraftPlantDatabaseImplement/ImplementationExtension.cs new file mode 100644 index 0000000..b2f0b6f --- /dev/null +++ b/AircraftPlant/AircraftPlantDatabaseImplement/ImplementationExtension.cs @@ -0,0 +1,27 @@ +using AircraftPlantContracts.DI; +using AircraftPlantContracts.StoragesContracts; +using AircraftPlantDatabaseImplement.Implements; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantDatabaseImplement +{ + public class ImplementationExtension : IImplementationExtension + { + public int Priority => 3; + + public void RegisterServices() + { + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + } + } +} diff --git a/AircraftPlant/AircraftPlantDatabaseImplement/Implements/BackUpInfo.cs b/AircraftPlant/AircraftPlantDatabaseImplement/Implements/BackUpInfo.cs new file mode 100644 index 0000000..e0b57f1 --- /dev/null +++ b/AircraftPlant/AircraftPlantDatabaseImplement/Implements/BackUpInfo.cs @@ -0,0 +1,32 @@ +using AircraftPlantContracts.StoragesContracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantDatabaseImplement.Implements +{ + public class BackUpInfo : IBackUpInfo + { + public List? GetList() where T : class, new() + { + using var context = new AircraftPlantDatabase(); + return context.Set().ToList(); + } + public Type? GetTypeByModelInterface(string modelInterfaceName) + { + var assembly = typeof(BackUpInfo).Assembly; + var types = assembly.GetTypes(); + foreach (var type in types) + { + if (type.IsClass && + type.GetInterface(modelInterfaceName) != null) + { + return type; + } + } + return null; + } + } +} diff --git a/AircraftPlant/AircraftPlantDatabaseImplement/Models/Client.cs b/AircraftPlant/AircraftPlantDatabaseImplement/Models/Client.cs index 31ea51f..33ba87e 100644 --- a/AircraftPlant/AircraftPlantDatabaseImplement/Models/Client.cs +++ b/AircraftPlant/AircraftPlantDatabaseImplement/Models/Client.cs @@ -6,18 +6,24 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; namespace AircraftPlantDatabaseImplement.Models { + [DataContract] public class Client : IClientModel { + [DataMember] public int Id { get; private set; } + [DataMember] [Required] public string ClientFIO { get; set; } = string.Empty; + [DataMember] [Required] public string Email { get; set; } = string.Empty; + [DataMember] [Required] public string Password { get; set; } = string.Empty; [ForeignKey("ClientId")] diff --git a/AircraftPlant/AircraftPlantDatabaseImplement/Models/Component.cs b/AircraftPlant/AircraftPlantDatabaseImplement/Models/Component.cs index 7ffeebf..a688f4c 100644 --- a/AircraftPlant/AircraftPlantDatabaseImplement/Models/Component.cs +++ b/AircraftPlant/AircraftPlantDatabaseImplement/Models/Component.cs @@ -5,16 +5,21 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Runtime.Serialization; namespace AircraftPlantDatabaseImplement.Models { + [DataContract] public class Component : IComponentModel { + [DataMember] public int Id { get; private set; } + [DataMember] [Required] public string ComponentName { get; private set; } = string.Empty; + [DataMember] [Required] public double Cost { get; set; } diff --git a/AircraftPlant/AircraftPlantDatabaseImplement/Models/Implementer.cs b/AircraftPlant/AircraftPlantDatabaseImplement/Models/Implementer.cs index f6176d2..27e44a2 100644 --- a/AircraftPlant/AircraftPlantDatabaseImplement/Models/Implementer.cs +++ b/AircraftPlant/AircraftPlantDatabaseImplement/Models/Implementer.cs @@ -8,18 +8,29 @@ using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Runtime.Serialization; namespace AircraftPlantDatabaseImplement.Models { + [DataContract] public class Implementer : IImplementerModel { + [DataMember] public int Id { get; private set; } + + [DataMember] [Required] public string ImplementerFIO { get; private set; } = string.Empty; + + [DataMember] [Required] public string Password { get; private set; } = string.Empty; + + [DataMember] [Required] public int WorkExperience { get; private set; } + + [DataMember] [Required] public int Qualification { get; private set; } [ForeignKey("ImplementerId")] diff --git a/AircraftPlant/AircraftPlantDatabaseImplement/Models/Message.cs b/AircraftPlant/AircraftPlantDatabaseImplement/Models/Message.cs index 3ca7d5e..a7bff10 100644 --- a/AircraftPlant/AircraftPlantDatabaseImplement/Models/Message.cs +++ b/AircraftPlant/AircraftPlantDatabaseImplement/Models/Message.cs @@ -4,7 +4,9 @@ using AircraftPlantDataModels; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; @@ -12,16 +14,30 @@ namespace AircraftPlantDatabaseImplement.Models { public class Message : IMessageInfoModel { + [NotMapped] + public int Id { get; private set; } + + [DataMember] [Key] public string MessageId { get; set; } = string.Empty; + + [DataMember] public int? ClientId { get; set; } public virtual Client? Client { get; set; } + + [DataMember] [Required] public string SenderName { get; set; } = string.Empty; + + [DataMember] [Required] public DateTime DateDelivery { get; set; } + + [DataMember] [Required] public string Subject { get; set; } = string.Empty; + + [DataMember] [Required] public string Body { get; set; } = string.Empty; public static Message? Create(MessageInfoBindingModel model) diff --git a/AircraftPlant/AircraftPlantDatabaseImplement/Models/Order.cs b/AircraftPlant/AircraftPlantDatabaseImplement/Models/Order.cs index fe4a767..37bff52 100644 --- a/AircraftPlant/AircraftPlantDatabaseImplement/Models/Order.cs +++ b/AircraftPlant/AircraftPlantDatabaseImplement/Models/Order.cs @@ -3,39 +3,51 @@ using AircraftPlantContracts.ViewModels; using AircraftPlantDataModels.Enums; using AircraftPlantDataModels.Models; using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; namespace AircraftPlantDatabaseImplement.Models { + [DataContract] public class Order : IOrderModel { + [DataMember] public int Id { get; set; } + [DataMember] [Required] public int PlaneId { get; set; } public virtual Plane Plane { get; set; } = new(); + [DataMember] [Required] public int ClientId { get; set; } + [DataMember] public Client Client { get; set; } = new(); + [DataMember] public int? ImplementerId { get; set; } public virtual Implementer? Implementer { get; set; } = new(); + [DataMember] [Required] public int Count { get; set; } + [DataMember] [Required] public double Sum { get; set; } + [DataMember] [Required] public OrderStatus Status { get; set; } + [DataMember] [Required] public DateTime DateCreate { get; set; } + [DataMember] public DateTime? DateImplement { get; set; } public static Order? Create(AircraftPlantDatabase context, OrderBindingModel? model) diff --git a/AircraftPlant/AircraftPlantDatabaseImplement/Models/Plane.cs b/AircraftPlant/AircraftPlantDatabaseImplement/Models/Plane.cs index 3108c85..e317513 100644 --- a/AircraftPlant/AircraftPlantDatabaseImplement/Models/Plane.cs +++ b/AircraftPlant/AircraftPlantDatabaseImplement/Models/Plane.cs @@ -8,17 +8,26 @@ using AircraftPlantContracts.ViewModels; using AircraftPlantDataModels.Models; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using System.Runtime.Serialization; namespace AircraftPlantDatabaseImplement.Models { + [DataContract] public class Plane : IPlaneModel { + [DataMember] public int Id { get; set; } + + [DataMember] [Required] public string PlaneName { get; set; } = string.Empty; + + [DataMember] [Required] public double Price { get; set; } private Dictionary? _planeComponents = null; + + [DataMember] [NotMapped] public Dictionary PlaneComponents { diff --git a/AircraftPlant/AircraftPlantFileImplement/AircraftPlantFileImplement.csproj b/AircraftPlant/AircraftPlantFileImplement/AircraftPlantFileImplement.csproj index a391d48..6b9c8fd 100644 --- a/AircraftPlant/AircraftPlantFileImplement/AircraftPlantFileImplement.csproj +++ b/AircraftPlant/AircraftPlantFileImplement/AircraftPlantFileImplement.csproj @@ -11,4 +11,8 @@ + + + + diff --git a/AircraftPlant/AircraftPlantFileImplement/BackUpInfo.cs b/AircraftPlant/AircraftPlantFileImplement/BackUpInfo.cs new file mode 100644 index 0000000..a4964b3 --- /dev/null +++ b/AircraftPlant/AircraftPlantFileImplement/BackUpInfo.cs @@ -0,0 +1,44 @@ +using AircraftPlantContracts.StoragesContracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantFileImplement +{ + public class BackUpInfo : IBackUpInfo + { + private readonly DataFileSingleton source; + private readonly PropertyInfo[] sourceProperties; + + public BackUpInfo() + { + source = DataFileSingleton.GetInstance(); + sourceProperties = source.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); + } + + public List? GetList() where T : class, new() + { + var requredType = typeof(T); + return (List?)sourceProperties.FirstOrDefault(x => x.PropertyType.IsGenericType && x.PropertyType.GetGenericArguments()[0] == requredType) + ?.GetValue(source); + + } + + public Type? GetTypeByModelInterface(string modelInterfaceName) + { + var assembly = typeof(BackUpInfo).Assembly; + var types = assembly.GetTypes(); + foreach (var type in types) + { + if (type.IsClass && type.GetInterface(modelInterfaceName) != null) + { + return type; + } + } + return null; + } + } +} diff --git a/AircraftPlant/AircraftPlantFileImplement/Client.cs b/AircraftPlant/AircraftPlantFileImplement/Client.cs index 9390971..06e6af7 100644 --- a/AircraftPlant/AircraftPlantFileImplement/Client.cs +++ b/AircraftPlant/AircraftPlantFileImplement/Client.cs @@ -4,17 +4,23 @@ using AircraftPlantDataModels; using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace AircraftPlantFileImplement { + [DataContract] public class Client : IClientModel { + [DataMember] public int Id { get; set; } + [DataMember] public string ClientFIO { get; set; } = string.Empty; + [DataMember] public string Email { get; set; } = string.Empty; + [DataMember] public string Password { get; set; } = string.Empty; public static Client? Create(ClientBindingModel? model) { diff --git a/AircraftPlant/AircraftPlantFileImplement/Component.cs b/AircraftPlant/AircraftPlantFileImplement/Component.cs index c993102..cfdcc4c 100644 --- a/AircraftPlant/AircraftPlantFileImplement/Component.cs +++ b/AircraftPlant/AircraftPlantFileImplement/Component.cs @@ -1,14 +1,19 @@ using AircraftPlantContracts.BindingModels; using AircraftPlantContracts.ViewModels; using AircraftPlantDataModels.Models; +using System.Runtime.Serialization; using System.Xml.Linq; namespace AircraftPlantFileImplement.Models { + [DataContract] public class Component : IComponentModel { + [DataMember] public int Id { get; private set; } + [DataMember] public string ComponentName { get; private set; } = string.Empty; + [DataMember] public double Cost { get; set; } public static Component? Create(ComponentBindingModel model) { @@ -32,8 +37,8 @@ namespace AircraftPlantFileImplement.Models return new Component() { Id = Convert.ToInt32(element.Attribute("Id")!.Value), - ComponentName = element.Element("ComponentName")!.Value, - Cost = Convert.ToDouble(element.Element("Cost")!.Value) + ComponentName = element.Element("Компонент")!.Value, + Cost = Convert.ToDouble(element.Element("Стоимость")!.Value) }; } public void Update(ComponentBindingModel model) @@ -53,7 +58,7 @@ namespace AircraftPlantFileImplement.Models }; public XElement GetXElement => new("Component", new XAttribute("Id", Id), - new XElement("ComponentName", ComponentName), - new XElement("Cost", Cost.ToString())); + new XElement("Компонент", ComponentName), + new XElement("Стоимость", Cost.ToString())); } } \ No newline at end of file diff --git a/AircraftPlant/AircraftPlantFileImplement/ImplementationExtension.cs b/AircraftPlant/AircraftPlantFileImplement/ImplementationExtension.cs new file mode 100644 index 0000000..896f802 --- /dev/null +++ b/AircraftPlant/AircraftPlantFileImplement/ImplementationExtension.cs @@ -0,0 +1,27 @@ +using AircraftPlantContracts.DI; +using AircraftPlantContracts.StoragesContracts; +using AircraftPlantFileImplement.Implements; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantFileImplement +{ + public class ImplementationExtension : IImplementationExtension + { + public int Priority => 1; + + public void RegisterServices() + { + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + } + } +} diff --git a/AircraftPlant/AircraftPlantFileImplement/Implementer.cs b/AircraftPlant/AircraftPlantFileImplement/Implementer.cs index 3755ba8..22bf9a5 100644 --- a/AircraftPlant/AircraftPlantFileImplement/Implementer.cs +++ b/AircraftPlant/AircraftPlantFileImplement/Implementer.cs @@ -4,18 +4,25 @@ using AircraftPlantDataModels; using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace AircraftPlantFileImplement { + [DataContract] public class Implementer : IImplementerModel { + [DataMember] public int Id { get; private set; } + [DataMember] public string ImplementerFIO { get; private set; } = string.Empty; + [DataMember] public string Password { get; private set; } = string.Empty; + [DataMember] public int WorkExperience { get; private set; } + [DataMember] public int Qualification { get; private set; } public static Implementer? Create(ImplementerBindingModel? model) { diff --git a/AircraftPlant/AircraftPlantFileImplement/Message.cs b/AircraftPlant/AircraftPlantFileImplement/Message.cs index a1e933e..194e2fe 100644 --- a/AircraftPlant/AircraftPlantFileImplement/Message.cs +++ b/AircraftPlant/AircraftPlantFileImplement/Message.cs @@ -4,19 +4,29 @@ using AircraftPlantDataModels; using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace AircraftPlantFileImplement { + [DataContract] public class Message : IMessageInfoModel { + [DataMember] + public int Id { get; private set; } + [DataMember] public string MessageId { get; set; } = string.Empty; + [DataMember] public int? ClientId { get; set; } + [DataMember] public string SenderName { get; set; } = string.Empty; + [DataMember] public DateTime DateDelivery { get; set; } + [DataMember] public string Subject { get; set; } = string.Empty; + [DataMember] public string Body { get; set; } = string.Empty; public static Message? Create(MessageInfoBindingModel model) { diff --git a/AircraftPlant/AircraftPlantFileImplement/Order.cs b/AircraftPlant/AircraftPlantFileImplement/Order.cs index bf3af81..7705784 100644 --- a/AircraftPlant/AircraftPlantFileImplement/Order.cs +++ b/AircraftPlant/AircraftPlantFileImplement/Order.cs @@ -5,22 +5,33 @@ using AircraftPlantDataModels.Models; using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace AircraftPlantFileImplement.Models { + [DataContract] public class Order : IOrderModel { + [DataMember] public int Id { get; private set; } + [DataMember] public int PlaneId { get; private set; } + [DataMember] public int ClientId { get; private set; } + [DataMember] public int? ImplementerId { get; private set; } + [DataMember] public int Count { get; private set; } + [DataMember] public double Sum { get; private set; } + [DataMember] public OrderStatus Status { get; private set; } + [DataMember] public DateTime DateCreate { get; private set; } + [DataMember] public DateTime? DateImplement { get; private set; } public static Order? Create(OrderBindingModel? model) { diff --git a/AircraftPlant/AircraftPlantFileImplement/Plane.cs b/AircraftPlant/AircraftPlantFileImplement/Plane.cs index 6bf45c0..7119cf3 100644 --- a/AircraftPlant/AircraftPlantFileImplement/Plane.cs +++ b/AircraftPlant/AircraftPlantFileImplement/Plane.cs @@ -7,17 +7,22 @@ using AircraftPlantContracts.BindingModels; using AircraftPlantContracts.ViewModels; using AircraftPlantDataModels.Models; using System.Xml.Linq; +using System.Runtime.Serialization; namespace AircraftPlantFileImplement.Models { + [DataContract] public class Plane : IPlaneModel { + [DataMember] public int Id { get; private set; } + [DataMember] public string PlaneName { get; private set; } = string.Empty; + [DataMember] public double Price { get; private set; } public Dictionary Components { get; private set; } = new(); - private Dictionary? _planeComponents = - null; + private Dictionary? _planeComponents = null; + [DataMember] public Dictionary PlaneComponents { get diff --git a/AircraftPlant/AircraftPlantView/DataGridViewExtension.cs b/AircraftPlant/AircraftPlantView/DataGridViewExtension.cs new file mode 100644 index 0000000..12db033 --- /dev/null +++ b/AircraftPlant/AircraftPlantView/DataGridViewExtension.cs @@ -0,0 +1,55 @@ +using AircraftPlantContracts.Attributes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AircraftPlantView +{ + public static class DataGridViewExtension + { + public static void FillAndConfigGrid(this DataGridView grid, List? + data) + { + if (data == null) + { + return; + } + grid.DataSource = data; + var type = typeof(T); + var properties = type.GetProperties(); + foreach (DataGridViewColumn column in grid.Columns) + { + var property = properties.FirstOrDefault(x => x.Name == column.Name); + if (property == null) + { + throw new InvalidOperationException($"В типе {type.Name} не найдено свойство с именем { column.Name }"); + } + var attribute = + property.GetCustomAttributes(typeof(ColumnAttribute), true)?.SingleOrDefault(); + if (attribute == null) + { + throw new InvalidOperationException($"Не найден атрибут типа ColumnAttribute для свойства { property.Name }"); + } + // ищем нужный нам атрибут + if (attribute is ColumnAttribute columnAttr) + { + column.HeaderText = columnAttr.Title; + column.Visible = columnAttr.Visible; + if (columnAttr.IsUseAutoSize) + { + column.AutoSizeMode = + (DataGridViewAutoSizeColumnMode)Enum.Parse(typeof(DataGridViewAutoSizeColumnMode) + , columnAttr.GridViewAutoSize.ToString()); + } + else + { + column.Width = columnAttr.Width; + } + } + } + } + } +} + diff --git a/AircraftPlant/AircraftPlantView/FormClients.cs b/AircraftPlant/AircraftPlantView/FormClients.cs index 6dfdea3..45121b9 100644 --- a/AircraftPlant/AircraftPlantView/FormClients.cs +++ b/AircraftPlant/AircraftPlantView/FormClients.cs @@ -65,14 +65,7 @@ namespace AircraftPlantView { try { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridViewClients.DataSource = list; - dataGridViewClients.Columns["Id"].Visible = false; - dataGridViewClients.Columns["ClientFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - dataGridViewClients.Columns["Email"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } + dataGridViewClients.FillAndConfigGrid(_logic.ReadList(null)); _logger.LogInformation("Загрузка клиентов"); } catch (Exception ex) diff --git a/AircraftPlant/AircraftPlantView/FormComponents.cs b/AircraftPlant/AircraftPlantView/FormComponents.cs index d3d16c5..cabfd48 100644 --- a/AircraftPlant/AircraftPlantView/FormComponents.cs +++ b/AircraftPlant/AircraftPlantView/FormComponents.cs @@ -9,6 +9,7 @@ using System.Threading.Tasks; using System.Windows.Forms; using AircraftPlantContracts.BindingModels; using AircraftPlantContracts.BusinessLogicsContracts; +using AircraftPlantContracts.DI; using Microsoft.Extensions.Logging; namespace AircraftPlantView @@ -51,30 +52,22 @@ namespace AircraftPlantView } private void ButtonAdd_Click(object sender, EventArgs e) { - var service = - Program.ServiceProvider?.GetService(typeof(FormComponent)); - if (service is FormComponent form) + var form = DependencyManager.Instance.Resolve(); + if (form.ShowDialog() == DialogResult.OK) { - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } + LoadData(); } } private void ButtonUpd_Click(object sender, EventArgs e) { if (dataGridViewComponents.SelectedRows.Count == 1) { - var service = - Program.ServiceProvider?.GetService(typeof(FormComponent)); - if (service is FormComponent form) + var form = DependencyManager.Instance.Resolve(); + + form.Id = Convert.ToInt32(dataGridViewComponents.SelectedRows[0].Cells["Id"].Value); + if (form.ShowDialog() == DialogResult.OK) { - form.Id = - Convert.ToInt32(dataGridViewComponents.SelectedRows[0].Cells["Id"].Value); - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } + LoadData(); } } } diff --git a/AircraftPlant/AircraftPlantView/FormImplementers.cs b/AircraftPlant/AircraftPlantView/FormImplementers.cs index a176361..d506599 100644 --- a/AircraftPlant/AircraftPlantView/FormImplementers.cs +++ b/AircraftPlant/AircraftPlantView/FormImplementers.cs @@ -85,13 +85,7 @@ namespace AircraftPlantView { try { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridViewImplementers.DataSource = list; - dataGridViewImplementers.Columns["Id"].Visible = false; - dataGridViewImplementers.Columns["ImplementerFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } + dataGridViewImplementers.FillAndConfigGrid(_logic.ReadList(null)); _logger.LogInformation("Загрузка списка исполнителей"); } catch (Exception ex) diff --git a/AircraftPlant/AircraftPlantView/FormMails.cs b/AircraftPlant/AircraftPlantView/FormMails.cs index 3b44bd0..08e1b03 100644 --- a/AircraftPlant/AircraftPlantView/FormMails.cs +++ b/AircraftPlant/AircraftPlantView/FormMails.cs @@ -57,14 +57,7 @@ namespace AircraftPlantView { try { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["MessageId"].Visible = false; - dataGridView.Columns["ClientId"].Visible = false; - dataGridView.Columns["Body"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } + dataGridView.FillAndConfigGrid(_logic.ReadList(null)); _logger.LogInformation("Загрузка писем"); } catch (Exception ex) diff --git a/AircraftPlant/AircraftPlantView/FormMain.Designer.cs b/AircraftPlant/AircraftPlantView/FormMain.Designer.cs index 6540ec9..6ea4431 100644 --- a/AircraftPlant/AircraftPlantView/FormMain.Designer.cs +++ b/AircraftPlant/AircraftPlantView/FormMain.Designer.cs @@ -1,4 +1,5 @@ -namespace AircraftPlantView + +namespace AircraftPlantView { partial class FormMain { @@ -44,6 +45,7 @@ списокЗаказовToolStripMenuItem = new ToolStripMenuItem(); запускРаботToolStripMenuItem = new ToolStripMenuItem(); почтаToolStripMenuItem = new ToolStripMenuItem(); + создатьБекапToolStripMenuItem = new ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit(); menuStrip1.SuspendLayout(); SuspendLayout(); @@ -105,7 +107,7 @@ // menuStrip1 // menuStrip1.ImageScalingSize = new Size(20, 20); - menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, отчётыToolStripMenuItem, запускРаботToolStripMenuItem, почтаToolStripMenuItem }); + menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem, отчётыToolStripMenuItem, запускРаботToolStripMenuItem, почтаToolStripMenuItem, создатьБекапToolStripMenuItem }); menuStrip1.Location = new Point(0, 0); menuStrip1.Name = "menuStrip1"; menuStrip1.Padding = new Padding(7, 3, 0, 3); @@ -190,6 +192,13 @@ почтаToolStripMenuItem.Text = "Почта"; почтаToolStripMenuItem.Click += ПочтаToolStripMenuItem_Click; // + // создатьБекапToolStripMenuItem + // + создатьБекапToolStripMenuItem.Name = "cоздатьБекапToolStripMenuItem"; + создатьБекапToolStripMenuItem.Size = new Size(123, 24); + создатьБекапToolStripMenuItem.Text = "Создать бекап"; + создатьБекапToolStripMenuItem.Click += CоздатьБекапToolStripMenuItem_Click; + // // FormMain // AutoScaleDimensions = new SizeF(8F, 20F); @@ -230,5 +239,6 @@ private ToolStripMenuItem исполнителиToolStripMenuItem; private ToolStripMenuItem запускРаботToolStripMenuItem; private ToolStripMenuItem почтаToolStripMenuItem; + private ToolStripMenuItem создатьБекапToolStripMenuItem; } } \ No newline at end of file diff --git a/AircraftPlant/AircraftPlantView/FormMain.cs b/AircraftPlant/AircraftPlantView/FormMain.cs index 0c1dd7a..9523055 100644 --- a/AircraftPlant/AircraftPlantView/FormMain.cs +++ b/AircraftPlant/AircraftPlantView/FormMain.cs @@ -1,6 +1,7 @@ using AircraftPlantBusinessLogic.BusinessLogics; using AircraftPlantContracts.BindingModels; using AircraftPlantContracts.BusinessLogicsContracts; +using AircraftPlantContracts.DI; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; @@ -35,18 +36,21 @@ namespace AircraftPlantView /// Имитация деятельности исполнителей /// private readonly IWorkProcess _workProcess; + + private readonly IBackUpLogic _backUpLogic; /// /// Конструктор /// /// /// - public FormMain(ILogger logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess) + public FormMain(ILogger logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess, IBackUpLogic backUpLogic) { InitializeComponent(); _logger = logger; _orderLogic = orderLogic; _reportLogic = reportLogic; _workProcess = workProcess; + _backUpLogic = backUpLogic; } /// /// Загрузка списка заказов @@ -64,11 +68,8 @@ namespace AircraftPlantView /// private void КомпонентыToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormComponents)); - if (service is FormComponents form) - { - form.ShowDialog(); - } + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); } /// /// Показать список всех изделий @@ -77,11 +78,8 @@ namespace AircraftPlantView /// private void ИзделияToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormPlanes)); - if (service is FormPlanes form) - { - form.ShowDialog(); - } + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); } /// /// Показать список всех клиентов @@ -90,11 +88,8 @@ namespace AircraftPlantView /// private void КлиентыToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormClients)); - if (service is FormClients form) - { - form.ShowDialog(); - } + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); } /// @@ -104,11 +99,8 @@ namespace AircraftPlantView /// private void ИсполнителиToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormImplementers)); - if (service is FormImplementers form) - { - form.ShowDialog(); - } + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); } /// @@ -118,7 +110,7 @@ namespace AircraftPlantView /// private void ЗапускРаботToolStripMenuItem_Click(object sender, EventArgs e) { - _workProcess.DoWork((Program.ServiceProvider?.GetService(typeof(IImplementerLogic )) as IImplementerLogic)!, _orderLogic); + _workProcess.DoWork(DependencyManager.Instance.Resolve(), _orderLogic); MessageBox.Show("Процесс обработки запущен", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); } @@ -129,11 +121,8 @@ namespace AircraftPlantView /// private void ПочтаToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormMails)); - if (service is FormMails form) - { - form.ShowDialog(); - } + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); } /// @@ -143,13 +132,34 @@ namespace AircraftPlantView /// private void ButtonCreateOrder_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder)); - if (service is FormCreateOrder form) + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); + LoadData(); + } + + private void CоздатьБекапToolStripMenuItem_Click(object sender, EventArgs e) + { + try { - form.ShowDialog(); - LoadData(); + if (_backUpLogic != null) + { + var fbd = new FolderBrowserDialog(); + if (fbd.ShowDialog() == DialogResult.OK) + { + _backUpLogic.CreateBackUp(new BackUpSaveBindingModel + { + FolderName = fbd.SelectedPath + }); + MessageBox.Show("Бекап создан", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } + /// /// Кнопка "Заказ выдан" /// @@ -195,15 +205,7 @@ namespace AircraftPlantView _logger.LogInformation("Загрузка заказов"); try { - var list = _orderLogic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["PlaneName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - dataGridView.Columns["PlaneId"].Visible = false; - dataGridView.Columns["ClientId"].Visible = false; - dataGridView.Columns["ImplementerId"].Visible = false; - } + dataGridView.FillAndConfigGrid(_orderLogic.ReadList(null)); _logger.LogInformation("Загрузка заказов"); } catch (Exception ex) @@ -224,20 +226,14 @@ namespace AircraftPlantView private void КомпонентыПоСамолётамToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormReportPlaneComponents)); - if (service is FormReportPlaneComponents form) - { - form.ShowDialog(); - } + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); } private void СписокЗаказовToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormReportOrders)); - if (service is FormReportOrders form) - { - form.ShowDialog(); - } + var form = DependencyManager.Instance.Resolve(); + form.ShowDialog(); } } diff --git a/AircraftPlant/AircraftPlantView/FormPlane.cs b/AircraftPlant/AircraftPlantView/FormPlane.cs index ca07dc0..bd6de85 100644 --- a/AircraftPlant/AircraftPlantView/FormPlane.cs +++ b/AircraftPlant/AircraftPlantView/FormPlane.cs @@ -1,6 +1,8 @@ using AircraftPlantContracts.BindingModels; using AircraftPlantContracts.BusinessLogicsContracts; +using AircraftPlantContracts.DI; using AircraftPlantContracts.SearchModels; +using AircraftPlantDatabaseImplement.Models; using AircraftPlantDataModels.Models; using Microsoft.Extensions.Logging; using System; @@ -84,27 +86,22 @@ namespace AircraftPlantView /// private void buttonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormPlaneComponent)); - if (service is FormPlaneComponent form) + var form = DependencyManager.Instance.Resolve(); + if (form.ShowDialog() == DialogResult.OK) { - if (form.ShowDialog() == DialogResult.OK) - { - if (form.ComponentModel == null) - { - return; - } - _logger.LogInformation("Добавление нового компонента:{ ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count); - if (_planeComponents.ContainsKey(form.Id)) - { - _planeComponents[form.Id] = (form.ComponentModel, form.Count); - } - else - { - _planeComponents.Add(form.Id, (form.ComponentModel, form.Count)); - } - LoadData(); - } + return; } + _logger.LogInformation("Добавление нового компонента:{ ComponentName}-{ Count}", form.ComponentModel.ComponentName, form.Count); + if (_planeComponents.ContainsKey(form.Id)) + { + _planeComponents[form.Id] = (form.ComponentModel, form.Count); + } + else + { + _planeComponents.Add(form.Id, (form.ComponentModel, + form.Count)); + } + LoadData(); } /// /// Кнопка "Изменить" @@ -115,22 +112,19 @@ namespace AircraftPlantView { if (dataGridView.SelectedRows.Count == 1) { - var service = Program.ServiceProvider?.GetService(typeof(FormPlaneComponent)); - if (service is FormPlaneComponent form) + var form = DependencyManager.Instance.Resolve(); + int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value); + form.Id = id; + form.Count = _planeComponents[id].Item2; + if (form.ShowDialog() == DialogResult.OK) { - int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value); - form.Id = id; - form.Count = _planeComponents[id].Item2; - if (form.ShowDialog() == DialogResult.OK) + if (form.ComponentModel == null) { - if (form.ComponentModel == null) - { - return; - } - _logger.LogInformation("Изменение компонента:{ ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count); - _planeComponents[form.Id] = (form.ComponentModel, form.Count); - LoadData(); + return; } + _logger.LogInformation("Изменение компонента:{ ComponentName}-{ Count}", form.ComponentModel.ComponentName, form.Count); + _planeComponents[form.Id] = (form.ComponentModel, form.Count); + LoadData(); } } } diff --git a/AircraftPlant/AircraftPlantView/FormPlanes.cs b/AircraftPlant/AircraftPlantView/FormPlanes.cs index 9c3d5ca..88233db 100644 --- a/AircraftPlant/AircraftPlantView/FormPlanes.cs +++ b/AircraftPlant/AircraftPlantView/FormPlanes.cs @@ -1,5 +1,6 @@ using AircraftPlantContracts.BindingModels; using AircraftPlantContracts.BusinessLogicsContracts; +using AircraftPlantContracts.DI; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; @@ -55,13 +56,10 @@ namespace AircraftPlantView /// private void buttonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormPlane)); - if (service is FormPlane form) + var form = DependencyManager.Instance.Resolve(); + if (form.ShowDialog() == DialogResult.OK) { - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } + LoadData(); } } /// @@ -73,14 +71,11 @@ namespace AircraftPlantView { if (dataGridViewPlanes.SelectedRows.Count == 1) { - var service = Program.ServiceProvider?.GetService(typeof(FormPlane)); - if (service is FormPlane form) + var form = DependencyManager.Instance.Resolve(); + form.Id = Convert.ToInt32(dataGridViewPlanes.SelectedRows[0].Cells["Id"].Value); + if (form.ShowDialog() == DialogResult.OK) { - form.Id = Convert.ToInt32(dataGridViewPlanes.SelectedRows[0].Cells["Id"].Value); - if (form.ShowDialog() == DialogResult.OK) - { - LoadData(); - } + LoadData(); } } } @@ -132,14 +127,7 @@ namespace AircraftPlantView { try { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridViewPlanes.DataSource = list; - dataGridViewPlanes.Columns["Id"].Visible = false; - dataGridViewPlanes.Columns["PlaneName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - dataGridViewPlanes.Columns["PlaneComponents"].Visible = false; - } + dataGridViewPlanes.FillAndConfigGrid(_logic.ReadList(null)); _logger.LogInformation("Загрузка изделий"); } catch (Exception ex) diff --git a/AircraftPlant/AircraftPlantView/Program.cs b/AircraftPlant/AircraftPlantView/Program.cs index ea40c46..fc5efe4 100644 --- a/AircraftPlant/AircraftPlantView/Program.cs +++ b/AircraftPlant/AircraftPlantView/Program.cs @@ -10,6 +10,7 @@ using NLog.Extensions.Logging; using System; using AircraftPlantBusinessLogic.MailWorker; using AircraftPlantContracts.BindingModels; +using AircraftPlantContracts.DI; namespace AircraftPlantView { @@ -31,14 +32,11 @@ namespace AircraftPlantView // see https://aka.ms/applicationconfiguration. ApplicationConfiguration.Initialize(); - var services = new ServiceCollection(); - ConfigureServices(services); - _serviceProvider = services.BuildServiceProvider(); + InitDependency(); try { - var mailSender = - _serviceProvider.GetService(); + var mailSender = DependencyManager.Instance.Resolve(); mailSender?.MailConfig(new MailConfigBindingModel { MailLogin = System.Configuration.ConfigurationManager.AppSettings["MailLogin"] ?? string.Empty, @@ -53,63 +51,58 @@ namespace AircraftPlantView } catch (Exception ex) { - var logger = _serviceProvider.GetService(); + var logger = DependencyManager.Instance.Resolve(); logger?.LogError(ex, " "); } - Application.Run(_serviceProvider.GetRequiredService()); + Application.Run(DependencyManager.Instance.Resolve()); } /// /// IoC- /// /// - private static void ConfigureServices(ServiceCollection services) + private static void InitDependency() { - services.AddLogging(option => + DependencyManager.InitDependency(); + + DependencyManager.Instance.AddLogging(option => { option.SetMinimumLevel(LogLevel.Information); option.AddNLog("nlog.config"); }); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(true); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + DependencyManager.Instance.RegisterType(); - services.AddTransient(); - services.AddSingleton(); - - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); } - private static void MailCheck(object obj) => ServiceProvider?.GetService()?.MailCheck(); + private static void MailCheck(object obj) => DependencyManager.Instance.Resolve()?.MailCheck(); } } \ No newline at end of file diff --git a/AircraftPlant/ImplementationExtensions/AircraftPlantContracts.dll b/AircraftPlant/ImplementationExtensions/AircraftPlantContracts.dll new file mode 100644 index 0000000000000000000000000000000000000000..3be7df95fad8607832e605712cb7c49c4d645478 GIT binary patch literal 31744 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 G7Wm&3M_3#H literal 0 HcmV?d00001 diff --git a/AircraftPlant/ImplementationExtensions/AircraftPlantDataModels.dll b/AircraftPlant/ImplementationExtensions/AircraftPlantDataModels.dll new file mode 100644 index 0000000000000000000000000000000000000000..6592b17309efc0dfa5dcc90fb8c530e8c4f1257d GIT binary patch literal 6656 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 literal 0 HcmV?d00001 diff --git a/AircraftPlant/ImplementationExtensions/AircraftPlantFileImplement.dll b/AircraftPlant/ImplementationExtensions/AircraftPlantFileImplement.dll new file mode 100644 index 0000000000000000000000000000000000000000..ad0ad261d33f63b18132658bb3669b0a4cc45665 GIT binary patch literal 41984 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 P)c@~m`o9(ICjrU1zY?Rv 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 Date: Wed, 22 May 2024 11:29:54 +0400 Subject: [PATCH 2/6] =?UTF-8?q?=D1=81=D0=B4=D0=B0=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AircraftPlantContracts»/DI/ServiceProviderLoader.cs | 8 ++++---- .../ImplementationExtension.cs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/AircraftPlant/AircraftPlantContracts»/DI/ServiceProviderLoader.cs b/AircraftPlant/AircraftPlantContracts»/DI/ServiceProviderLoader.cs index a28d4d4..04c9657 100644 --- a/AircraftPlant/AircraftPlantContracts»/DI/ServiceProviderLoader.cs +++ b/AircraftPlant/AircraftPlantContracts»/DI/ServiceProviderLoader.cs @@ -22,10 +22,10 @@ namespace AircraftPlantContracts.DI var files = Directory.GetFiles(TryGetImplementationExtensionsFolder(), "*.dll", SearchOption.AllDirectories); foreach (var file in files.Distinct()) { - Assembly asm = Assembly.LoadFrom(file); + Assembly asm = Assembly.LoadFrom(file); foreach (var t in asm.GetExportedTypes()) { - if (t.IsClass && typeof(IImplementationExtension).IsAssignableFrom(t)) + if (t.IsClass && typeof(IImplementationExtension).IsAssignableFrom(t)) { if (source == null) { @@ -34,9 +34,9 @@ namespace AircraftPlantContracts.DI else { var newSource = (IImplementationExtension)Activator.CreateInstance(t)!; - if (newSource.Priority > source.Priority) + if (newSource.Priority > source.Priority) { - source = newSource; + source = newSource; } } } diff --git a/AircraftPlant/AircraftPlantDatabaseImplement/ImplementationExtension.cs b/AircraftPlant/AircraftPlantDatabaseImplement/ImplementationExtension.cs index b2f0b6f..422af97 100644 --- a/AircraftPlant/AircraftPlantDatabaseImplement/ImplementationExtension.cs +++ b/AircraftPlant/AircraftPlantDatabaseImplement/ImplementationExtension.cs @@ -13,7 +13,7 @@ namespace AircraftPlantDatabaseImplement { public int Priority => 3; - public void RegisterServices() + public void RegisterServices() { DependencyManager.Instance.RegisterType(); DependencyManager.Instance.RegisterType(); -- 2.25.1 From 74e0d2ae9d132a9b7c2c01d31aab18f3dca019aa Mon Sep 17 00:00:00 2001 From: kamilia Date: Sat, 25 May 2024 23:39:16 +0400 Subject: [PATCH 3/6] =?UTF-8?q?Revert=20"=D1=81=D0=B4=D0=B0=D0=BB=D0=B0"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit c63fa4c74a31d9e4628766f86b3ade900f194c4a. --- .../AircraftPlantContracts»/DI/ServiceProviderLoader.cs | 8 ++++---- .../ImplementationExtension.cs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/AircraftPlant/AircraftPlantContracts»/DI/ServiceProviderLoader.cs b/AircraftPlant/AircraftPlantContracts»/DI/ServiceProviderLoader.cs index 04c9657..a28d4d4 100644 --- a/AircraftPlant/AircraftPlantContracts»/DI/ServiceProviderLoader.cs +++ b/AircraftPlant/AircraftPlantContracts»/DI/ServiceProviderLoader.cs @@ -22,10 +22,10 @@ namespace AircraftPlantContracts.DI var files = Directory.GetFiles(TryGetImplementationExtensionsFolder(), "*.dll", SearchOption.AllDirectories); foreach (var file in files.Distinct()) { - Assembly asm = Assembly.LoadFrom(file); + Assembly asm = Assembly.LoadFrom(file); foreach (var t in asm.GetExportedTypes()) { - if (t.IsClass && typeof(IImplementationExtension).IsAssignableFrom(t)) + if (t.IsClass && typeof(IImplementationExtension).IsAssignableFrom(t)) { if (source == null) { @@ -34,9 +34,9 @@ namespace AircraftPlantContracts.DI else { var newSource = (IImplementationExtension)Activator.CreateInstance(t)!; - if (newSource.Priority > source.Priority) + if (newSource.Priority > source.Priority) { - source = newSource; + source = newSource; } } } diff --git a/AircraftPlant/AircraftPlantDatabaseImplement/ImplementationExtension.cs b/AircraftPlant/AircraftPlantDatabaseImplement/ImplementationExtension.cs index 422af97..b2f0b6f 100644 --- a/AircraftPlant/AircraftPlantDatabaseImplement/ImplementationExtension.cs +++ b/AircraftPlant/AircraftPlantDatabaseImplement/ImplementationExtension.cs @@ -13,7 +13,7 @@ namespace AircraftPlantDatabaseImplement { public int Priority => 3; - public void RegisterServices() + public void RegisterServices() { DependencyManager.Instance.RegisterType(); DependencyManager.Instance.RegisterType(); -- 2.25.1 From 19e9a4fecd3e464d889faaa14c903c21f9157f6a Mon Sep 17 00:00:00 2001 From: kamilia Date: Sat, 25 May 2024 23:45:02 +0400 Subject: [PATCH 4/6] =?UTF-8?q?=D0=BA=D0=B0=D0=BA=20=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=D0=B5=D1=82=20=D1=8D=D1=82=D0=BE=D1=82=20?= =?UTF-8?q?=D0=B2=D0=B0=D1=88=20=D0=B3=D0=B8=D1=82=D0=B8=D0=B3=D0=BD=D0=BE?= =?UTF-8?q?=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 5 +++++ .../AircraftPlantContracts.dll | Bin 31744 -> 0 bytes .../AircraftPlantDataModels.dll | Bin 6656 -> 0 bytes .../AircraftPlantDatabaseImplement.dll | Bin 83968 -> 0 bytes .../AircraftPlantFileImplement.dll | Bin 41984 -> 0 bytes .../AircraftPlantListImplement.dll | Bin 27136 -> 0 bytes 6 files changed, 5 insertions(+) delete mode 100644 AircraftPlant/ImplementationExtensions/AircraftPlantContracts.dll delete mode 100644 AircraftPlant/ImplementationExtensions/AircraftPlantDataModels.dll delete mode 100644 AircraftPlant/ImplementationExtensions/AircraftPlantDatabaseImplement.dll delete mode 100644 AircraftPlant/ImplementationExtensions/AircraftPlantFileImplement.dll delete mode 100644 AircraftPlant/ImplementationExtensions/AircraftPlantListImplement.dll diff --git a/.gitignore b/.gitignore index ca1c7a3..84cb5ae 100644 --- a/.gitignore +++ b/.gitignore @@ -398,3 +398,8 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml +/AircraftPlant/ImplementationExtensions/AircraftPlantContracts.dll +/AircraftPlant/ImplementationExtensions/AircraftPlantDataModels.dll +/AircraftPlant/ImplementationExtensions/AircraftPlantDatabaseImplement.dll +/AircraftPlant/ImplementationExtensions/AircraftPlantFileImplement.dll +/AircraftPlant/ImplementationExtensions/AircraftPlantListImplement.dll diff --git a/AircraftPlant/ImplementationExtensions/AircraftPlantContracts.dll b/AircraftPlant/ImplementationExtensions/AircraftPlantContracts.dll deleted file mode 100644 index 3be7df95fad8607832e605712cb7c49c4d645478..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31744 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 G7Wm&3M_3#H diff --git a/AircraftPlant/ImplementationExtensions/AircraftPlantDataModels.dll b/AircraftPlant/ImplementationExtensions/AircraftPlantDataModels.dll deleted file mode 100644 index 6592b17309efc0dfa5dcc90fb8c530e8c4f1257d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6656 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 diff --git a/AircraftPlant/ImplementationExtensions/AircraftPlantFileImplement.dll b/AircraftPlant/ImplementationExtensions/AircraftPlantFileImplement.dll deleted file mode 100644 index ad0ad261d33f63b18132658bb3669b0a4cc45665..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41984 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 P)c@~m`o9(ICjrU1zY?Rv z;g_d9V|2Vct$SxSpB&2BJ96oPWN&(K&>l{1%OrEV29w#rWb3-Fzy1|8Z8 z0GW(c`wdDyNpKr-`CKn3@vQ*F!gm|Kp3e$QS3@q-Z$puNr33h~t)2LKJ}Zb;dPqUv z!1(#YzL^xDrqx7!i-`>3{@1~DGZiC>Q0+F2m=kYX26M9}_&&26M*X$R9f7ZmhR^=m zGbmpL3s*Z=Sj7Cn;u+>OK314+`gRKf24+k#1OX%9Fa!Yu@lqOsP<5k^IxsA_5+}3f zq!F>|15{H{w=7?c;LbAbI6AY#9B2>;CMq-mg@_&1L=6*g)S`+y3f5LPn$#pQgk7Jq z>!Z3krcZ37#0ChqkrEpq*hWfh)cztr9>gp&g?zW{3Bb{PD#FA>O<-y*dy*y)WXqn+ zMD5?0*G&Pkn?s;c9=t|**iHo3YlO^H3hj3XIW|O7;rn{{j-bXVKNYqjWM0EUdm49h z8aNeo6B9=2bYPWag?LPseFi8Zu+IcC@Azv~3FG7h7@2A(S@JJdw2s2CZ(#mRnoKj# zBMescw+B}^?DXg3o+7E~02M(@h*epaDf1y(w=m%oAFBNn_uCv0)zF@ShSh<1pne=# zka*l9G!g$^fPcPH|0?S!XS44J z#vEKHoHXi;2}rFF)l@Et!&doVmb?OPaXh64>St*hgW-&*wqO}^7KvLY4c*CBbRlDo z>JeAI`gxf2_&9Ho$H#f8(vZ!CwfY+HIF*#1%{;amj0fu@j@8$?y(YPZC-6>-P(0*m zG2My!IaA+x=bf^^*Qmg&ytstkT5agO@X>u30a6xmpJ-!hkYDAQ*oXkAO!UcW4M~Vj znuvNdT#u%TF>#Z&;HKz5l%=ST_ZBN+VZm1W^gSClAMB!;sN-j zb9ySBx2c#jz2IZjU<2{Am(>%gYeqz4$Z7z;2 z(#5d{x;XY57sncKapY7Tq3jjwAeM`Yhad7=nO-%u)nsv+A~rsLovZ=zIw}Q62{kE}=+v%RUb{mrx|BWiQtR z^1`w|qzNR0Wv|c#GQhIo80zWOx^i+THOfJB!auf%qKKo2IyDqIjheO+hPZ~ZjBAr+ zw}7K+Xe%(Op%|}aui`FwgIW#5si83PL2D?MjMJabMj*;-XsHjXhO!T;hH`jR!?88g z;~wwk;-9XeUjN>shOWf|zzXIX>Uzdyv(0g{9%Zu~#Cw*_G5$McQxBok0GCZMh$6*V z@V;e}2kDee*GDd!u8&eSJyDtqf2C}4E-AgTvME-%Y!*#&*&Jhq3$0T&RSPMb9B5D3 z^u$`1Ot;-1J<+}Z7PtnLMy{fc>!!*+pRDGP#Hgfha?nsWl?68~b=~y1 z;!B+k%~RA(w@=HyklnC&SzGU4H?fgnk&X3P)lK%9>n1y=JTKNw>`GiWxf5MCB~f+V z^mzO}brXx-t(%@PbfD{!es$d(qk_8W;jH0-hm=pny6Gy|YauVKn^HplAJ-7vZ>arW z5EKO5bSQ=(VBp3>F$4i)lEV-LjL8l|5HN5fqM8UYMcv79ZP|`J8WUVvTQ=sqFmI?W z>p0BV3Z-atGJ%yN#6?VCNei)_38a+}Xd1B*Y9YFrfEBmUaGzkxC%*wwlmg_DWur(- zT|k;x_QjgOYPal7nn3bf_GV2W0WA9xO<>|I`%)%q|5;ZC4xUCiN*d*GXp{r-Zlwda zTHgCFRA%huTVS7S2MhTQ!?HgNj;b9W0VcHrk+AHo>z7>gam+IIC{Zah&y>EwC<;AAM-U`N1+9 zNn+UI_JkuAWnW@qkaGUFli6QfP{AX^VwP0D7!x|^+BC2*avmC zxExNXhGWkb9{2ccA^z#Jh1b9LI9q%V{$Us5Id?tdBr;528g`*rIhg^sim^ zn3~7+y6AuEGLB$VsrmY8(6MEVPOqHvCHLob#zeVAui)nuJnBkLDm~(TNGd#$@Qheh zc$MQT==#5Ra$MaPV^_g=C))k!rFg6a`^@!S#gaWQ*7qym21Fb>UEd{Hbba@D{66&^ z3&pMPo-v@yNJ+oCzK>BsefMyNc;F%BQ?b6g3Y<4%>igJrji(o~u6=|mMret3mP0FE z*DSLEEF1e8*7YPT;9+3c_sviWYud6gH)>%cI+1z*iZsH5H-vZ0!d7`SnPx37=20_l zK4IMH&&Q*1_x<{XKKm-rQDo={uJto~_SIe*3+x(?zC7ldh>(SG#PcsXft$Kg1DyLy zpXP;EHn3`|?wW)pBdZQlJZRs9kyVFF+t2e&sEftJaOYZdo7&Aj)q8Zk&W+K%4!X_> zJC4xBgWlK?y5``WGoqePS*7vAU?$68yrbpq#Tza4kgqxtkJRJHGIrvsE9#~sD%ALR z>f)8&{vnaMdlhq6QPMXpnTy*dpM5>NbLw$*G#*`g%c;W{tLsX{R5w)=ui|!GhPiol z9Oa9*q(pp78IHSUcwBrOo|wVCDzAG4lj7fl@GmyTKX$}t7r2A!M0IMEkwiREk0dP% zLQP#uqDFZ)p5o(e93`ykiHV7-{jE5GOg%YaJ|3spC^(Vo3GoTaoAIUI)F^Kb!<(8? zZ_2xzRJSrQNp(4y;*)J8GO7?y9OB^yLPcO}^_2J&)#K#S9w(_DpF)q5N_s@1;~5|y z+sIgf5z`Iy@tC>~GpW~@^DzhirqNStVuNCxoo44V4*p|vU9C^}Q*lQ9A}0F`UXRK} zr*zFjuJIH)bm;@->(Que;L#=LgN>!an*|DRsX-}L#Za)_vSKBbs*23GUt&@D>O>eU z^`m}=p7|h-a--;|ej^GS=Uj!(xsbM;2$gmKS|9!DXP}8BLO6l-UVxRciNFh&4~Sl8 zK87*7eJEq~tz*2Iw@`ai9di6uZWM>BT7uTza96y9D~scPP42^GdpLB`d3^2JUY+~! zW^CNpB?!-U=n{nLK73_jLG#?+kL#H-w-fCfFv{{dQ#D)d?ml}jbV8D^B{iF84K-U? z;F>KfQ`c;dTfWrCp*gl@pYBRSru*7e>E*zS3E;wl!RsHll%yu>Gn|TQ8VfLr=S%RPGeG`66SL^dOj;_-W z=GC&X6QV%ZV@i;mD9|DMlVD4Y#A_P7i@@8ckiDN(F*OmYi}3UzJdt_-h*+R#*A$Dk zV;Q4XuiUWF%*Xu@T-0}1Au*032;;ImuyNzY3wdSPa8B9xs}~1fhke{Y`HJ?f>L4~Q z+_I1%c{_!ccBy!qw2PKMsqnEU73@v2*E!EOXK*a?pFnRM3YOZQQ1ClK6$*^|9`*|X zfq%}Z^*ch(sNe4$;ml%xKKoNJR(20k>VvumVIR~z2nSy^9D5JqagTRRnH7Bx;`Q%+ z?m=d$+;BbPLjwAImyP>DWK&t#)IErH*)vGF2PyjR-h+6}%eJnP&S95r>m~OfJZgOp zA|uxKAf6Gw_dUpL8Sg~9neurqGUf~cd?%-3vO!Y{mkQtFZEZ@ z9J`<4-JCn)mVGC?VM(gF+u6Imo5PMDFAu-E2VtLiKU1+}&x`jUcf$>cICOeDlhEmV z5Rb?2a}R=WE9qC?gN#wZe&*ra#RFGs%(I=j3N}LLY-h!Hb6BbB>6{>V zT$gkhf`Ea|M`;LxWaZ~*AHsDm`|ka{#94XVDe$v9zF)I(OC-0HjlXEcGkB+I^! ziQ2XLnH!JBdFF;eVgFWx5(ErvVu~RM7}#YLLl7{qtQA8LFp&3(AqW^4h++r=24+_= z1OWpfQw%}CsC5{EsMuoP=68;zvE9uZEXQ^)hQ)Va63+XXz>0;QdTIr3pA@*-vW%n~-IHi3#`pCr7}{KLg%w9;&mT z@FTLW3sxHX7h;w0@rtH~#)gHB3+FEdfnUw^13rpl%M9e_By35~RsruC&SeL8V6hT? zk3)&;j167%BjDp0KYv4eE3Q8WeQg-@%6@*BD<8zbxOn2{!eQ?0kH$ip00z(%_}1VH z?+C%BEWYFMh0F8@d@%rihcEIjT+vM0ao^lNh%eFl2;&$&T_61G3X6Ur@KNjLiYof2 z3g-KRvqBaf3;r%*QIEjW1)d}DvjTrW^>yBa!2s4t1;c>H#O zW&I)>Ppv{t5NaykH?i!}zz?F$c&4{ms9K>;ryij~LY;vhX0qn5VjC-)affINbwLGF z(`iJgu*FmzeUfHVMdfLM*^~?=0|w=c8GsjK5g7Ee$?!jbPosDIvjcJZHlRU!e6@fJ zeG34m`pyB&`c?v7=(_;W@T~__b{2~rwqVdqlP&)QP+2qRM&Z9=Tmt@9>1(||4g7~b z)?em#`c?W~=-9tTTFv%vcY8c2{=XvdD`L6I&;7n^vd-W8vVixR+{>?hgMiAUemH6 zJV6T52`$_09|!8!Lfu6xt%n04YMVy*+(%e&0p{W(oKY$w2)Nd<%)&#mrQ&d?AYE)By7oA{D zq+2xg&FGn+Zr9X>(Ye+nx>r+Mq6uL`B+eG0vxWu2J!sq{}; z){A+cO5fKqp4-#tRW0MWJ&jIi*(?4zc=rD9TK1OT0QEa9`)*_oo&&z4Wj{krI)g$u zN%9z0THV%}G$a(~#1<<_M-+ve=(VO%^<36eW0*z@N~kuWI482ud`45rsywJoIF)g} zJQOQf)9D2qf|#0Ib&EBV3S2%x&9rW@5L(%qPZ&L*QgoxDB%ZZ&tCn#*Yw6#GQohvE z@3iJo#H^OyQL@mt5wltfap9&D;mO8fNXH3vV`#SVTceI9YuRJ?#brHB)3U!qcGgp^ zmR(-;D`Orl(6T*MCqbR7Wy7&L)cqDME5ycu>d>;SRdsY0b!*wqs&Sw`tYtj!jnpR; zNB(xJk$$8#{gHdE1+?TW_F9c^0S%N;dxhdyAAsh6YARXv1yDyCWweO(m#l@bsy0YwDrcacc=ZxX`ikrgaYWG%0GP^`^Cq zj%%t1)N0ztVHm9I_*4`jZ!EwHP}w$mNTXLyMR(caep&{7tr0BN>keK_pVgZF$fdze^s=I4x7kFm z3w1(#*+g#&rF_{$ztOT+ky)GRk6QL7*Ddn3$cV54=FlZnA=D^VfB~vT%YI9T=~6mP z%Ys-Pm(naP3t&InLi4n&s>%R$ww8S&@_GM>}7usT`LsFEFDbKq*fjg?^4;|HtJUt zcB!FYFa3w2Bxb$zXQ5Qgdda_v+o_oKQdFoD;X5#YeKcOn4r2cL=nO6Uod5Iw49(WE zNBxh0I!nu@#9s4nr^Q;<5c{=%2dxl_{k$T$lkOIZ{k$%ir5`B@e(no?l&V+D7{t$y zGV1vlR0!}1bxP<|P$?R;B*M}n^zuIl{%-dFEBs>b%99V$uUF@T^i`_QJ$gA_{4e$4 zy=;2zdvSw0akuoB_E-V6(t>ffotfEHDj-`&+>A=w(mERQSZ4Hw}iPf*&QWo=1t##Yc%x zz(+!{9L*2A=^9gGXl=e6BMLKEZ`0 z8exNb3>$nh3>!Sgu)(Lju)*iLZn4=aBi$k+?H1p*$VexP<;h}sGWt3U%WSPxbXvv# zR`I`8{GV^|$!fmAXQ=rGpO)qud@h=A@Cj(X!DpSN;?+`vPhCq5K3^?0_#_2B&P+=U zJ{>JJ_#D)yN6oX)FTV9jzy0D{yTQG*OOGAG9~S+38OybzKP>!fML%tD{Y}d#-Zt*2 zdfv>+Sh5nsdeN+x5!K6x>SaWG#b%S(yj5)O70p}4=BQX3HAW-5eRs-Sj~WXrcKb%f zw>xFt=NhX+pY+W&wg8SATt7#Rm9cw#pHceMSow%=zj(4=JZTd9P2x$Dc+w=EEE69d z6dy(mu09Wn4KgPw7N3q}FjNNZ=W#5kxJq^g!dcVPSc|`1th@BCG&le+@ zYleJg7%}*CFkfD7p{z;o#;mCl!FxrgmwIVhI3qfv!XFi#8w9^WbZ&r7TX>)79KiFG zKZOp8^q^=S5zbNJ92L&Cxk)}m@gGg@>={|u6MS4)A4+-a}aE=P+ zb-`a3-0+E?KK65(;L`+e7Q9*T9>EI&4+uOW@VLO&HDn9q7i$_aCn@+e4Vkk-@MaB} z)9U9D^#~`eA@d7@k7~%Ay`p(QI0rRk{t>~CYRH@yMDumwyzXa?5fI-3jQjD-#tKgp z&NSi71?NwpX5lmoCoOnd@Pgo@8nT50f*;h7IS&V>(D?8X;T#qGsK!}(TyV132fxL= zCk0<2ut#8@@C$+;5cr^Qj^Me26+SM|ALO>J0{04hLEy{~^ZNuALfp#%fe#Ajh~UQs z{!};=W}T$K6#{z%_J!F_LGS|t9~90J!H*04sc>fE*}N5gp^``aQ-Q~$Y?ESQS>OtR zJpu~?55#yZM+7FTSaXHI9)Sgc2Lv7wcw8Wj6Pp582<#D95O_e~5rM}AQe5-}t`OK0 z=Y9(U4*>otbX@q95KVzA1oj9l2s|M0h`{3swm{Vkr{QVH+4x)1`{--*U7W3Ij4j4C z<737{#&gEEjn|Afjet4NTyJhOFEj5j|JHoT{IU59^S9>dzQ=t(@crEPJD=&F>0jmV z@$d5A*(EqsqS^tmx{G>L7^K2L=y9my$m8cj|oWc?~<5g1|hRRwf@)H+-Lo_d{`Z+kE$XhP|m&EpK zWfT=+vs(PQH^Q19j{OF3xyAOs9{W9DC}QGHQrUk}U#_@T&@kcp`I_&f<{ zB69qWqXN)G1cSh%fF|w%!oaHlO+>T;a4IAQVjBg1Iwbr=5x=Ly`-V91B)_i2dxL7= z(*gM}UdIEU324$R{Py3#n}>&-m-jI^b=vZBRR)Nf*F2-c|sbc(*zq z_!>Zy*21=df30I7@J`s~f3;vSpiN7`9|AP#ayl1y4$!1Lodj5EyH=3etwGv=G%yUF)}?{xopeqX>};5%LK=X)`J zXIcDI2mXjB7Gt&UiZZWMZ@TbGtzE_MT=A(vPTfueG}{=UdH62E_dI-8;kyRk4cu() zuKxb?w*E}deCo*NhjH1M?%$Q^-Zcc?0&30n4rlGbbZ!L1vNd+!uKvt&YR=|*bLs8F zo&D*-;TC&vIG64n&NsBS(~ivW*7gCk9mot0XL76C*HONl#ab=>S*SP)MXH;+M)Jd% zfrb{lzds|r=Nrz?3}$lKUTSaeQ(g2avx-`i$>-BMGLUg!MT)y&7afU%k8x7B^SG^h zQBG;GOEmZO(K3%RhOqpyty@>7doRP=^3~Z)KjiLs%0=yc&^Mboa#U|%M8YFUdtFk}xR z2~I6;O%G>Uav8vKk5&z&v;F1lu3ZD=%!_uV`?K4#y=hM5a1It71S4nsNx z-!mbnkgEAOmB0zZDP-b;8>dq!bPcD6cb$sAYuiV$c*+OGQFR?H7q{5E22atd#m=9C zyVC9(DL27Av}XFVS7dVKQdyEZ|75i~$w=pChPy|GGAl>0$z=N5dH2|!?#;+@m%LQ! zoS|w97|ai+k&fK3-NCnJ9gI6F&0A?dhP5?s@5;eOy9Byx*v?@ep>}6E4sN$yp3J&S zxgpHtT%MZYBI(Sl!_ii$y)~O3vh%#_693y;#liAIPy^;&ODNva-1Q~0;*ydPc}O0! zn=EeYQV!2fcNX2~U3NX@n@Q<|)@OF02xM|R6WIIN%?xcA>O&*xn_H_jDSdm$*37nD zJ9cDpD|7ahGBnOi*vRx}a9K65Ez{SR>1!UwPl~qf0*AfI_GfakvqRG(a+NmluI^H> z#a(dNiae)$6**;&6h+PXd}d%<|44Us*lVLZokQeSLfu3mL4`;V!`?JFy>BRk8E^x(SOs>`wGGPeVj*~?PvOjfwcxRu$#J{VFQ&$27w%hD_1c$QxYUoF8> zma_~?xN5y;(z)K9Wqo&f*lN{#7@nTJdV1}96gkjR-MnhvokjKAE^?`<848Qi^3aP*};?kdKsZ zpACKes!2PJcRH!uU1fC+ze;9LP{Y-}hHJaqRu;yptA;a!yb9&0`ff5dQd0B9Tq(!d z{4(415tG*1MMpDztFG$J4Doq^u*Ic$6kW(tY-QlEect%GZEEL3--aRH0!SiFHlGc! zQw{OCXRvo7nYUpLC9cs;{cMPJ|W_$AvORrlTht-DJ zmC0R!8kl$YYL}sQKE0aq;-}7uyoA6dcm$F>imy>;OW`G-r#0E$oSnC~52NG0O!Hv6 zeRe1Y~?_zR)c1*&kWdCWSWO*ot#Pa zDpxokZ@Sc3mDh!oo^`p_%=YxI{$Wz%kp-jfDBZ>94nsP{>=h5SrO_)Hy_`B^Qx-!l zyK*_)ekhy|zG6&{z=R`ZCO6Doqx$1Sl<8wjLgS9v!R5*k-~+O54P*_*yO#g4P!{ni zSww;`huy`&NKVME|1JY%Q&t)3v$V(I*UmA~p64Zs>N+q4N_}4Vw+CP89n@thYv?YelM7;8#2DcA1PF5ahHY?>JiX@Qy+O*oAdvnq(ULj~8884CIm zP0Vq7IV26*5^bveA>GR%)k~Wjh(kIMuD)3lv~)rgicCBvHDfW3MVn)oV{yod1v+9< z#i9)uQctCC;W=s0k?2sKJf}T*PI=O?H8@oZ^mvhV2v?DZ9doo)1di!&9dl>wn4U3L(K};BCeKx;V~gkN znByLM08+Wv2~6c}8#at6Z%t82;|@vV7sElH8hS|O@rx0i*9f2Jb;c3IMBz;{G(KMV zB@DkBO0Y^Pt7;4#di+CMuaAE}a*oeBJz!e+U&v=Al6rZz>1&6+cIvCMouxG0WFdN( z4!;F&Oe@OQ7qR=Oc^-$Yro=D&R2?54Vt}{E(*xl~1HQK#XYiJpSQEpm73^YZ7ADfz zN)s90Uu6@A`+#kus*T6@sF;pyJV4{!|V1to>gGiXx7+Ev{xb}rLAG*qu|{?EJO>;`0XcdW*J zZo-d?`qLx)+$qE@lF&F4zes%d!zlhd%AkPUw%}huN00OIM``$v@Dm(r5Tb5=Q`7eC zXK!z8Z0c?7U9f0-@1k^LZ{yMhed$c!{B4VtE=Vuz>s`DwgFj;95fOf~C8&uvaWVjq z_ywI07m?4#`=HDCZ}hs&XmfwRedQV)G_!bN0Yye<6#uunNSD*PVN2F;6FMd z)9HySu6zEMWUT3AF8c|YsBTDyMtgX_O_ zN&Y{ZZ~Ec=R%h_Bo7qOoIa@a1fSTXZ+&7RN+|ruKUp8zHZD~p#8~x5x-+A^sPaPXQ zw&z%3OKxarOUVRmY2KEX*EL-`?V*yx@fLgAM_~xh*tQI2hB0}i4NG(zhWfTqS6lOf zMQ4+C@2KM*LNIX8?SJ*f+U-C7`X@G@zVwF}rt^85@uWkQUf=NO5#dCgYwhn}gL^O< z$oC@qGV=UD+PpIhM#hG!)Y|_y6#rG4{JUy}(jiN><6SS6@ma48-%XHwgBOPWe8b0o zey|bmK(_*}!kgMIyhUAyceq<|U5j_W>qPT8|F2G}caxln{83l=qX1BTd^!KUpH>hC ztfujvcQt;8+D~}QPJ{S2CT&rhDXqF8O@o_fxYd76w2fncp7~vP3+xTxtuyyAf)S-bVduc785VQ+6&m-y9X)i42ZO*mAj#v} zE-l$_Zo?A(d_?RzBWi^tFIKYX#q0lHYQGWNwc(C)BkbqULoqJ%@n*l#{jxv&Zl5DN zEV_djPrqlRe~BLrc(dJ)|M-)_%wlVV?Hyv7BRYgw@{H`j-$-&)lK5^HKh|kJ&ldaP z#EB^t`Ttvg)Vy}09~)loLhOeq15i!=oe#;U+v=86HOTPb~+nh&b=o1 z(unT@{OVylu8S~crW^5_hXwF8jTrW!-8M*=lg4i(`XFBnO6BAdnfqqUcOIMpX!ax0 lN#t^A78L#9T=<{QfBOgwssGOyzq8@~w;%BT4A2{a{{u+ Date: Sat, 25 May 2024 23:49:00 +0400 Subject: [PATCH 5/6] =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=BE=20=D0=BB=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D0=B5=D1=82=D1=81=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 84cb5ae..5bdd661 100644 --- a/.gitignore +++ b/.gitignore @@ -398,8 +398,4 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml -/AircraftPlant/ImplementationExtensions/AircraftPlantContracts.dll -/AircraftPlant/ImplementationExtensions/AircraftPlantDataModels.dll -/AircraftPlant/ImplementationExtensions/AircraftPlantDatabaseImplement.dll -/AircraftPlant/ImplementationExtensions/AircraftPlantFileImplement.dll -/AircraftPlant/ImplementationExtensions/AircraftPlantListImplement.dll +/AircraftPlant/ImplementationExtensions -- 2.25.1 From aa0e0d08dfd97ce29f3b22d615aaf4f85e5b6e20 Mon Sep 17 00:00:00 2001 From: kamilia Date: Sat, 25 May 2024 23:55:16 +0400 Subject: [PATCH 6/6] =?UTF-8?q?=D0=B1=D0=B0=D0=BB=D1=83=D1=8E=D1=81=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ListImplementationExtension.cs | 26 ------------------- 1 file changed, 26 deletions(-) delete mode 100644 AircraftPlant/AbstractShopListImplement/ListImplementationExtension.cs diff --git a/AircraftPlant/AbstractShopListImplement/ListImplementationExtension.cs b/AircraftPlant/AbstractShopListImplement/ListImplementationExtension.cs deleted file mode 100644 index 69958c2..0000000 --- a/AircraftPlant/AbstractShopListImplement/ListImplementationExtension.cs +++ /dev/null @@ -1,26 +0,0 @@ -using AircraftPlantContracts.DI; -using AircraftPlantContracts.StoragesContracts; -using AircraftPlantListImplement.Implements; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace AircraftPlantListImplement -{ - public class ListImplementationExtension : IImplementationExtension - { - public int Priority => 0; - public void RegisterServices() - { - DependencyManager.Instance.RegisterType(); - DependencyManager.Instance.RegisterType(); - DependencyManager.Instance.RegisterType(); - DependencyManager.Instance.RegisterType(); - DependencyManager.Instance.RegisterType(); - DependencyManager.Instance.RegisterType(); - DependencyManager.Instance.RegisterType(); - } - } -} \ No newline at end of file -- 2.25.1