From e71570067da654a6c0ab0e8d177e34e5647ce9e3 Mon Sep 17 00:00:00 2001 From: antoc0der <1@DESKTOP-K1L8ND3> Date: Sun, 19 May 2024 17:31:03 +0400 Subject: [PATCH 1/7] =?UTF-8?q?=D0=B7=D0=B0=D0=BA=D1=83=D0=BF=D0=B0=D0=B5?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Attributes/ColumnAttribute.cs | 27 ++++++++ .../Attributes/GridViewAutoSize.cs | 20 ++++++ .../BindingModels/BackUpSaveBindingModel.cs | 13 ++++ .../BindingModels/MessageInfoBindingModel.cs | 1 + .../BusinessLogicsContracts/IBackUpLogic.cs | 14 +++++ FlowerShopContracts/DI/DependancyManager.cs | 46 ++++++++++++++ .../DI/IDependencyContainer.cs | 18 ++++++ .../DI/IImplementationExtension.cs | 14 +++++ .../DI/ServiceDependencyContainer.cs | 62 +++++++++++++++++++ .../DI/ServiceProviderLoader.cs | 60 ++++++++++++++++++ .../FlowerShopContracts.csproj | 1 + .../StoragesContracts/IBackUpInfo.cs | 14 +++++ .../ViewModels/ClientViewModel.cs | 20 +++--- .../ViewModels/ComponentViewModel.cs | 16 ++--- .../ViewModels/FlowerViewModel.cs | 19 +++--- .../ViewModels/ImplementerViewModel.cs | 12 ++-- .../ViewModels/MessageInfoViewModel.cs | 15 +++-- .../ViewModels/OrderViewModel.cs | 42 +++++++------ FlowerShopDataModels/IMessageInfoModel.cs | 2 +- 19 files changed, 362 insertions(+), 54 deletions(-) create mode 100644 FlowerShopContracts/Attributes/ColumnAttribute.cs create mode 100644 FlowerShopContracts/Attributes/GridViewAutoSize.cs create mode 100644 FlowerShopContracts/BindingModels/BackUpSaveBindingModel.cs create mode 100644 FlowerShopContracts/BusinessLogicsContracts/IBackUpLogic.cs create mode 100644 FlowerShopContracts/DI/DependancyManager.cs create mode 100644 FlowerShopContracts/DI/IDependencyContainer.cs create mode 100644 FlowerShopContracts/DI/IImplementationExtension.cs create mode 100644 FlowerShopContracts/DI/ServiceDependencyContainer.cs create mode 100644 FlowerShopContracts/DI/ServiceProviderLoader.cs create mode 100644 FlowerShopContracts/StoragesContracts/IBackUpInfo.cs diff --git a/FlowerShopContracts/Attributes/ColumnAttribute.cs b/FlowerShopContracts/Attributes/ColumnAttribute.cs new file mode 100644 index 0000000..1ca901e --- /dev/null +++ b/FlowerShopContracts/Attributes/ColumnAttribute.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopContracts.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/FlowerShopContracts/Attributes/GridViewAutoSize.cs b/FlowerShopContracts/Attributes/GridViewAutoSize.cs new file mode 100644 index 0000000..98f4eb0 --- /dev/null +++ b/FlowerShopContracts/Attributes/GridViewAutoSize.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopContracts.Attributes +{ + public enum GridViewAutoSize + { + NotSet = 0, + None = 1, + ColumnHeader = 2, + AllCellsExceptHeader = 4, + AllCells = 6, + DisplayedCellsExceptHeader = 8, + DisplayedCells = 10, + Fill = 16 + } +} diff --git a/FlowerShopContracts/BindingModels/BackUpSaveBindingModel.cs b/FlowerShopContracts/BindingModels/BackUpSaveBindingModel.cs new file mode 100644 index 0000000..4d12df6 --- /dev/null +++ b/FlowerShopContracts/BindingModels/BackUpSaveBindingModel.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopContracts.BindingModels +{ + public class BackUpSaveBinidngModel + { + public string FolderName { get; set; } = string.Empty; + } +} diff --git a/FlowerShopContracts/BindingModels/MessageInfoBindingModel.cs b/FlowerShopContracts/BindingModels/MessageInfoBindingModel.cs index 8b5fd4b..d6db511 100644 --- a/FlowerShopContracts/BindingModels/MessageInfoBindingModel.cs +++ b/FlowerShopContracts/BindingModels/MessageInfoBindingModel.cs @@ -15,5 +15,6 @@ namespace FlowerShopContracts.BindingModels public string Subject { get; set; } = string.Empty; public string Body { get; set; } = string.Empty; public DateTime DateDelivery { get; set; } + public int Id => throw new NotImplementedException(); } } diff --git a/FlowerShopContracts/BusinessLogicsContracts/IBackUpLogic.cs b/FlowerShopContracts/BusinessLogicsContracts/IBackUpLogic.cs new file mode 100644 index 0000000..904dafd --- /dev/null +++ b/FlowerShopContracts/BusinessLogicsContracts/IBackUpLogic.cs @@ -0,0 +1,14 @@ +using FlowerShopContracts.BindingModels; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopContracts.BusinessLogicsContracts +{ + public interface IBackUpLogic + { + void CreateBackUp(BackUpSaveBinidngModel model); + } +} diff --git a/FlowerShopContracts/DI/DependancyManager.cs b/FlowerShopContracts/DI/DependancyManager.cs new file mode 100644 index 0000000..87294b1 --- /dev/null +++ b/FlowerShopContracts/DI/DependancyManager.cs @@ -0,0 +1,46 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopContracts.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(); + } +} diff --git a/FlowerShopContracts/DI/IDependencyContainer.cs b/FlowerShopContracts/DI/IDependencyContainer.cs new file mode 100644 index 0000000..04ab01c --- /dev/null +++ b/FlowerShopContracts/DI/IDependencyContainer.cs @@ -0,0 +1,18 @@ +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopContracts.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/FlowerShopContracts/DI/IImplementationExtension.cs b/FlowerShopContracts/DI/IImplementationExtension.cs new file mode 100644 index 0000000..8a2a7ea --- /dev/null +++ b/FlowerShopContracts/DI/IImplementationExtension.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopContracts.DI +{ + public interface IImplementationExtension + { + public int Priority { get; } + public void RegisterServices(); + } +} diff --git a/FlowerShopContracts/DI/ServiceDependencyContainer.cs b/FlowerShopContracts/DI/ServiceDependencyContainer.cs new file mode 100644 index 0000000..3ccbbb7 --- /dev/null +++ b/FlowerShopContracts/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 FlowerShopContracts.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 T : class + { + if (isSingle) + { + _serviceCollection.AddSingleton(); + } + else + { + _serviceCollection.AddTransient(); + } + _serviceProvider = null; + } + + public void RegisterType(bool isSingle) where U : class, T 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/FlowerShopContracts/DI/ServiceProviderLoader.cs b/FlowerShopContracts/DI/ServiceProviderLoader.cs new file mode 100644 index 0000000..6e3fddb --- /dev/null +++ b/FlowerShopContracts/DI/ServiceProviderLoader.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopContracts.DI +{ + public static partial class ServiceProviderLoader + { + 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"; + } + } + +} diff --git a/FlowerShopContracts/FlowerShopContracts.csproj b/FlowerShopContracts/FlowerShopContracts.csproj index 901b7f6..ee93d96 100644 --- a/FlowerShopContracts/FlowerShopContracts.csproj +++ b/FlowerShopContracts/FlowerShopContracts.csproj @@ -7,6 +7,7 @@ + diff --git a/FlowerShopContracts/StoragesContracts/IBackUpInfo.cs b/FlowerShopContracts/StoragesContracts/IBackUpInfo.cs new file mode 100644 index 0000000..87e8e34 --- /dev/null +++ b/FlowerShopContracts/StoragesContracts/IBackUpInfo.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopContracts.StoragesContracts +{ + public interface IBackUpInfo + { + List? GetList() where T : class, new(); + Type? GetTypeByModelInterface(string modelInterfaceName); + } +} diff --git a/FlowerShopContracts/ViewModels/ClientViewModel.cs b/FlowerShopContracts/ViewModels/ClientViewModel.cs index 79577d0..5c72c27 100644 --- a/FlowerShopContracts/ViewModels/ClientViewModel.cs +++ b/FlowerShopContracts/ViewModels/ClientViewModel.cs @@ -1,4 +1,5 @@ -using FlowerShopDataModels.Models; +using FlowerShopContracts.Attributes; +using FlowerShopDataModels.Models; using System; using System.Collections.Generic; using System.ComponentModel; @@ -10,12 +11,13 @@ namespace FlowerShopContracts.ViewModels { public class ClientViewModel : IClientModel { - public int Id { get; set; } - [DisplayName("ФИО клиента")] - public string ClientFIO { get; set; } = string.Empty; - [DisplayName("Логин (эл. почта)")] - public string Email { get; set; } = string.Empty; - [DisplayName("Пароль")] - public string Password { get; set; } = string.Empty; - } + [Column(visible: false)] + public int Id { get; set; } + [Column(title: "ФИО клиента", width: 150)] + public string ClientFIO { get; set; } = string.Empty; + [Column(title: "Email клиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] + public string Email { get; set; } = string.Empty; + [Column(title: "Пароль", width: 150)] + public string Password { get; set; } = string.Empty; + } } diff --git a/FlowerShopContracts/ViewModels/ComponentViewModel.cs b/FlowerShopContracts/ViewModels/ComponentViewModel.cs index 667f0bb..ab18bc5 100644 --- a/FlowerShopContracts/ViewModels/ComponentViewModel.cs +++ b/FlowerShopContracts/ViewModels/ComponentViewModel.cs @@ -1,4 +1,5 @@ -using FlowerShopDataModels.Models; +using FlowerShopContracts.Attributes; +using FlowerShopDataModels.Models; using System; using System.Collections.Generic; using System.ComponentModel; @@ -10,10 +11,11 @@ namespace FlowerShopContracts.ViewModels { public class ComponentViewModel : IComponentModel { - public int Id { get; set; } - [DisplayName("Название компонента")] - public string ComponentName { get; set; } = string.Empty; - [DisplayName("Цена")] - public double Cost { get; set; } - } + [Column(visible: false)] + public int Id { get; set; } + [Column(title: "Название компонента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] + public string ComponentName { get; set; } = string.Empty; + [Column(title: "Цена", width: 80)] + public double Cost { get; set; } + } } diff --git a/FlowerShopContracts/ViewModels/FlowerViewModel.cs b/FlowerShopContracts/ViewModels/FlowerViewModel.cs index 0010c97..75cc88e 100644 --- a/FlowerShopContracts/ViewModels/FlowerViewModel.cs +++ b/FlowerShopContracts/ViewModels/FlowerViewModel.cs @@ -1,4 +1,5 @@ -using FlowerShopDataModels.Models; +using FlowerShopContracts.Attributes; +using FlowerShopDataModels.Models; using System; using System.Collections.Generic; using System.ComponentModel; @@ -10,13 +11,15 @@ namespace FlowerShopContracts.ViewModels { public class FlowerViewModel : IFlowerModel { - public int Id { get; set; } - [DisplayName("Название изделия")] - public string FlowerName { get; set; } = string.Empty; - [DisplayName("Цена")] - public double Price { get; set; } - public Dictionary FlowerComponents - { + [Column(visible: false)] + public int Id { get; set; } + [Column(title: "Название цветка", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] + public string FlowerName { get; set; } = string.Empty; + [Column(title: "Цена", width: 100)] + public double Price { get; set; } + [Column(visible: false)] + public Dictionary FlowerComponents + { get; set; } = new(); diff --git a/FlowerShopContracts/ViewModels/ImplementerViewModel.cs b/FlowerShopContracts/ViewModels/ImplementerViewModel.cs index 7c43f92..518b7c5 100644 --- a/FlowerShopContracts/ViewModels/ImplementerViewModel.cs +++ b/FlowerShopContracts/ViewModels/ImplementerViewModel.cs @@ -1,4 +1,5 @@ -using FlowerShopDataModels.Models; +using FlowerShopContracts.Attributes; +using FlowerShopDataModels.Models; using System; using System.Collections.Generic; using System.ComponentModel; @@ -10,14 +11,15 @@ namespace FlowerShopContracts.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: "Стаж работы", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] public int WorkExperience { get; set; } = 0; - [DisplayName("Квалификация")] + [Column(title: "Квалификация", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] public int Qualification { get; set; } = 0; - [DisplayName("Пароль")] + [Column(title: "Пароль", width: 150)] public string Password { get; set; } = string.Empty; } } diff --git a/FlowerShopContracts/ViewModels/MessageInfoViewModel.cs b/FlowerShopContracts/ViewModels/MessageInfoViewModel.cs index 3f5339b..601736c 100644 --- a/FlowerShopContracts/ViewModels/MessageInfoViewModel.cs +++ b/FlowerShopContracts/ViewModels/MessageInfoViewModel.cs @@ -1,4 +1,5 @@ -using FlowerShopDataModels.Models; +using FlowerShopContracts.Attributes; +using FlowerShopDataModels.Models; using System; using System.Collections.Generic; using System.ComponentModel; @@ -10,15 +11,19 @@ namespace FlowerShopContracts.ViewModels { public class MessageInfoViewModel : IMessageInfoModel { + [Column(visible: false)] public string MessageId { get; set; } = string.Empty; + [Column(visible: false)] public int? ClientId { get; set; } - [DisplayName("Отправитель")] + [Column(title: "Отправитель", gridViewAutoSize: GridViewAutoSize.DisplayedCells, isUseAutoSize: true)] public string SenderName { get; set; } = string.Empty; - [DisplayName("Дата письма")] + [Column(title: "Дата письма", width: 100)] public DateTime DateDelivery { get; set; } - [DisplayName("Заголовок")] + [Column(title: "Заголовок", width: 150)] public string Subject { get; set; } = string.Empty; - [DisplayName("Текст")] + [Column(title: "Текст", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string Body { get; set; } = string.Empty; + [Column(visible: false)] + public int Id => throw new NotImplementedException(); } } diff --git a/FlowerShopContracts/ViewModels/OrderViewModel.cs b/FlowerShopContracts/ViewModels/OrderViewModel.cs index 05602be..1127c09 100644 --- a/FlowerShopContracts/ViewModels/OrderViewModel.cs +++ b/FlowerShopContracts/ViewModels/OrderViewModel.cs @@ -6,31 +6,35 @@ using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; +using FlowerShopContracts.Attributes; namespace FlowerShopContracts.ViewModels { public class OrderViewModel : IOrderModel { - [DisplayName("Номер")] - public int Id { get; set; } - public int FlowerId { get; set; } + [Column(title: "Номер", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] + public int Id { get; set; } + [Column(visible: false)] + public int FlowerId { get; set; } + [Column(visible: false)] public int? ImplementerId { get; set; } = null; - [DisplayName("Изделие")] - public string FlowerName { get; set; } = string.Empty; - [DisplayName("Исполнитель")] + [Column(visible: false)] + public int ClientId { get; set; } + [Column(title: "Цветок", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] + public string FlowerName { get; set; } = string.Empty; + [Column(title: "ФИО исполнителя", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] public string ImplementerFIO { get; set; } = string.Empty; - [DisplayName("Количество")] - public int Count { get; set; } - [DisplayName("Сумма")] - public double Sum { get; set; } - [DisplayName("Статус")] - public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; - [DisplayName("Дата создания")] - public DateTime DateCreate { get; set; } = DateTime.Now; - [DisplayName("Дата выполнения")] - public DateTime? DateImplement { get; set; } - public int ClientId { get; set; } - [DisplayName("Клиент")] - public string ClientFIO { get; set; } = string.Empty; + [Column(title: "Количество", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] + public int Count { get; set; } + [Column(title: "Сумма", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] + public double Sum { get; set; } + [Column(title: "Статус", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] + public OrderStatus Status { get; set; } = OrderStatus.Неизвестен; + [Column(title: "Дата создания", width: 100)] + public DateTime DateCreate { get; set; } = DateTime.Now; + [Column(title: "Дата выполнения", width: 100)] + public DateTime? DateImplement { get; set; } + [Column(title: "ФИО клиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)] + public string ClientFIO { get; set; } = string.Empty; } } diff --git a/FlowerShopDataModels/IMessageInfoModel.cs b/FlowerShopDataModels/IMessageInfoModel.cs index b03660a..2712a5c 100644 --- a/FlowerShopDataModels/IMessageInfoModel.cs +++ b/FlowerShopDataModels/IMessageInfoModel.cs @@ -6,7 +6,7 @@ using System.Threading.Tasks; namespace FlowerShopDataModels.Models { - public interface IMessageInfoModel + public interface IMessageInfoModel : IId { string MessageId { get; } int? ClientId { get; } -- 2.25.1 From a321251734308a29b6667a62172223c285b077a9 Mon Sep 17 00:00:00 2001 From: antoc0der <1@DESKTOP-K1L8ND3> Date: Sun, 19 May 2024 19:09:33 +0400 Subject: [PATCH 2/7] =?UTF-8?q?=D0=B4=D0=BE=D0=BA=D1=83=D0=BF=D0=B0=D0=B5?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FlowerShopBusinessLogic/BackUpLogic.cs | 96 +++++++++++++++++++ .../FlowerShopContracts.csproj | 2 +- FlowerShopDatabaseImplement/BackUpInfo.cs | 31 ++++++ FlowerShopDatabaseImplement/Client.cs | 24 +++-- FlowerShopDatabaseImplement/Component.cs | 19 ++-- .../DatabaseImplementationExtension.cs | 26 +++++ FlowerShopDatabaseImplement/Flower.cs | 24 +++-- .../FlowerShopDatabaseImplement.csproj | 4 + FlowerShopDatabaseImplement/MessageInfo.cs | 10 +- FlowerShopDatabaseImplement/Order.cs | 43 +++++---- FlowerShopFileImplement/BackUpInfo.cs | 44 +++++++++ FlowerShopFileImplement/Client.cs | 18 ++-- FlowerShopFileImplement/Component.cs | 16 ++-- .../FileImplementationExtension.cs | 32 +++++++ FlowerShopFileImplement/Flower.cs | 21 ++-- .../FlowerShopFileImplement.csproj | 4 + FlowerShopFileImplement/Implementer.cs | 7 ++ FlowerShopFileImplement/MessageInfo.cs | 15 +-- FlowerShopFileImplement/Order.cs | 30 ++++-- FlowerShopListImplement/BackUpInfo.cs | 22 +++++ .../FlowerShopListImplement.csproj | 5 + .../ListImplementationExtension.cs | 32 +++++++ FlowerShopListImplement/MessageInfo.cs | 2 +- ProjectFlowerShop/DataGridViewExtension.cs | 54 +++++++++++ ProjectFlowerShop/FormClients.cs | 14 +-- ProjectFlowerShop/FormComponents.cs | 22 ++--- ProjectFlowerShop/FormFlower.cs | 7 +- ProjectFlowerShop/FormFlowers.cs | 20 ++-- ProjectFlowerShop/FormViewMail.cs | 9 +- ProjectFlowerShop/ImplementersForm.cs | 22 +---- ProjectFlowerShop/MainForm.Designer.cs | 23 +++-- ProjectFlowerShop/MainForm.cs | 59 ++++++++---- ProjectFlowerShop/Program.cs | 93 +++++++++--------- 33 files changed, 626 insertions(+), 224 deletions(-) create mode 100644 FlowerShopBusinessLogic/BackUpLogic.cs create mode 100644 FlowerShopDatabaseImplement/BackUpInfo.cs create mode 100644 FlowerShopDatabaseImplement/DatabaseImplementationExtension.cs create mode 100644 FlowerShopFileImplement/BackUpInfo.cs create mode 100644 FlowerShopFileImplement/FileImplementationExtension.cs create mode 100644 FlowerShopListImplement/BackUpInfo.cs create mode 100644 FlowerShopListImplement/ListImplementationExtension.cs create mode 100644 ProjectFlowerShop/DataGridViewExtension.cs diff --git a/FlowerShopBusinessLogic/BackUpLogic.cs b/FlowerShopBusinessLogic/BackUpLogic.cs new file mode 100644 index 0000000..2e59059 --- /dev/null +++ b/FlowerShopBusinessLogic/BackUpLogic.cs @@ -0,0 +1,96 @@ +using FlowerShopContracts.BindingModels; +using FlowerShopContracts.BusinessLogicsContracts; +using FlowerShopContracts.StoragesContracts; +using FlowerShopDataModels; +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 FlowerShopBusinessLogic.BusinessLogic +{ + 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(BackUpSaveBinidngModel 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/FlowerShopContracts/FlowerShopContracts.csproj b/FlowerShopContracts/FlowerShopContracts.csproj index ee93d96..66f451b 100644 --- a/FlowerShopContracts/FlowerShopContracts.csproj +++ b/FlowerShopContracts/FlowerShopContracts.csproj @@ -8,7 +8,7 @@ - + diff --git a/FlowerShopDatabaseImplement/BackUpInfo.cs b/FlowerShopDatabaseImplement/BackUpInfo.cs new file mode 100644 index 0000000..f4cb197 --- /dev/null +++ b/FlowerShopDatabaseImplement/BackUpInfo.cs @@ -0,0 +1,31 @@ +using FlowerShopContracts.StoragesContracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopDatabaseImplement.Implements +{ + public class BackUpInfo : IBackUpInfo + { + public List? GetList() where T : class, new() + { + using var context = new FlowerShopDataBase(); + 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/FlowerShopDatabaseImplement/Client.cs b/FlowerShopDatabaseImplement/Client.cs index fa27197..52fdca7 100644 --- a/FlowerShopDatabaseImplement/Client.cs +++ b/FlowerShopDatabaseImplement/Client.cs @@ -10,19 +10,25 @@ using System.Text; using System.Threading.Tasks; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; namespace FlowerShopDatabaseImplement.Models { - public class Client : IClientModel + [DataContract] + public class Client : IClientModel { - public int Id { get; private set; } - [Required] - public string ClientFIO { get; private set; } = string.Empty; - [Required] - public string Email { get; set; } = string.Empty; - [Required] - public string Password { get; set; } = string.Empty; - [ForeignKey("ClientId")] + [DataMember] + public int Id { get; private set; } + [DataMember] + [Required] + public string ClientFIO { get; private set; } = string.Empty; + [DataMember] + [Required] + public string Email { get; set; } = string.Empty; + [DataMember] + [Required] + public string Password { get; set; } = string.Empty; + [ForeignKey("ClientId")] public virtual List Orders { get; set; } = new(); public static Client? Create(ClientBindingModel model) { diff --git a/FlowerShopDatabaseImplement/Component.cs b/FlowerShopDatabaseImplement/Component.cs index b1bf724..601d682 100644 --- a/FlowerShopDatabaseImplement/Component.cs +++ b/FlowerShopDatabaseImplement/Component.cs @@ -9,17 +9,22 @@ using FlowerShopContracts.BindingModels; using FlowerShopContracts.ViewModels; using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; +using System.Runtime.Serialization; namespace FlowerShopDatabaseImplement.Models { - public class Component : IComponentModel + [DataContract] + public class Component : IComponentModel { - public int Id { get; private set; } - [Required] - public string ComponentName { get; private set; } = string.Empty; - [Required] - public double Cost { get; set; } - [ForeignKey("ComponentId")] + [DataMember] + public int Id { get; private set; } + [DataMember] + [Required] + public string ComponentName { get; private set; } = string.Empty; + [DataMember] + [Required] + public double Cost { get; set; } + [ForeignKey("ComponentId")] public virtual List FlowerComponents { get; set; } = new(); public static Component? Create(ComponentBindingModel model) diff --git a/FlowerShopDatabaseImplement/DatabaseImplementationExtension.cs b/FlowerShopDatabaseImplement/DatabaseImplementationExtension.cs new file mode 100644 index 0000000..fe8e84a --- /dev/null +++ b/FlowerShopDatabaseImplement/DatabaseImplementationExtension.cs @@ -0,0 +1,26 @@ +using FlowerShopContracts.DI; +using FlowerShopContracts.StoragesContracts; +using FlowerShopDatabaseImplement.Implements; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopDatabaseImplement +{ + public class DatabaseImplementationExtension : IImplementationExtension + { + public int Priority => 2; + 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/FlowerShopDatabaseImplement/Flower.cs b/FlowerShopDatabaseImplement/Flower.cs index 1c50d43..65fd76c 100644 --- a/FlowerShopDatabaseImplement/Flower.cs +++ b/FlowerShopDatabaseImplement/Flower.cs @@ -10,19 +10,25 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using System.Runtime.Serialization; namespace FlowerShopDatabaseImplement.Models { - public class Flower : IFlowerModel + [DataContract] + public class Flower : IFlowerModel { - public int Id { get; set; } - [Required] - public string FlowerName { get; set; } = string.Empty; - [Required] - public double Price { get; set; } - private Dictionary? _flowerComponents = null; - [NotMapped] - public Dictionary FlowerComponents + [DataMember] + public int Id { get; set; } + [DataMember] + [Required] + public string FlowerName { get; set; } = string.Empty; + [DataMember] + [Required] + public double Price { get; set; } + private Dictionary? _flowerComponents = null; + [DataMember] + [NotMapped] + public Dictionary FlowerComponents { get { diff --git a/FlowerShopDatabaseImplement/FlowerShopDatabaseImplement.csproj b/FlowerShopDatabaseImplement/FlowerShopDatabaseImplement.csproj index 43c2b67..15ac4ff 100644 --- a/FlowerShopDatabaseImplement/FlowerShopDatabaseImplement.csproj +++ b/FlowerShopDatabaseImplement/FlowerShopDatabaseImplement.csproj @@ -20,4 +20,8 @@ + + + + diff --git a/FlowerShopDatabaseImplement/MessageInfo.cs b/FlowerShopDatabaseImplement/MessageInfo.cs index 3bb2b1e..99f803b 100644 --- a/FlowerShopDatabaseImplement/MessageInfo.cs +++ b/FlowerShopDatabaseImplement/MessageInfo.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; +using System.Runtime.Serialization; using System.Text; using System.Threading.Tasks; using FlowerShopContracts.BindingModels; @@ -11,21 +12,18 @@ using FlowerShopDataModels.Models; namespace FlowerShopDatabaseImplement.Models { + [DataContract] public class MessageInfo : IMessageInfoModel { [Key] + [DataMember] public string MessageId { get; private set; } = string.Empty; - + public int Id => throw new NotImplementedException(); public int? ClientId { get; private set; } - public string SenderName { get; private set; } = string.Empty; - public DateTime DateDelivery { get; private set; } = DateTime.Now; - public string Subject { get; private set; } = string.Empty; - public string Body { get; private set; } = string.Empty; - public Client? Client { get; private set; } public static MessageInfo? Create(FlowerShopDataBase context, MessageInfoBindingModel model) diff --git a/FlowerShopDatabaseImplement/Order.cs b/FlowerShopDatabaseImplement/Order.cs index ea2093d..df6a46c 100644 --- a/FlowerShopDatabaseImplement/Order.cs +++ b/FlowerShopDatabaseImplement/Order.cs @@ -10,27 +10,38 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using FlowerShopDataModels.Enums; +using System.Runtime.Serialization; namespace FlowerShopDatabaseImplement.Models { - public class Order : IOrderModel + [DataContract] + public class Order : IOrderModel { - public int Id { get; private set; } - [Required] - public int Count { get; private set; } - [Required] - public double Sum { get; private set; } - [Required] - public OrderStatus Status { get; private set; } - [Required] - public DateTime DateCreate { get; private set; } - public DateTime? DateImplement { get; private set; } - [Required] - public int FlowerId { get; private set; } - [Required] - public int ClientId { get; private set; } - public virtual Client? Client { get; private set; } + [DataMember] + public int Id { get; private set; } + [DataMember] + [Required] + public int Count { get; private set; } + [DataMember] + [Required] + public double Sum { get; private set; } + [DataMember] + [Required] + public OrderStatus Status { get; private set; } + [DataMember] + [Required] + public DateTime DateCreate { get; private set; } + [DataMember] + public DateTime? DateImplement { get; private set; } + [DataMember] + [Required] + public int FlowerId { get; private set; } + [DataMember] + [Required] + public int ClientId { get; private set; } + public virtual Client? Client { get; private set; } public virtual Flower? Flower { get; set; } + [DataMember] public int? ImplementerId { get; private set; } = null; public virtual Implementer? Implementer { get; private set; } public static Order? Create(OrderBindingModel model) diff --git a/FlowerShopFileImplement/BackUpInfo.cs b/FlowerShopFileImplement/BackUpInfo.cs new file mode 100644 index 0000000..cad8a19 --- /dev/null +++ b/FlowerShopFileImplement/BackUpInfo.cs @@ -0,0 +1,44 @@ +using FlowerShopContracts.StoragesContracts; +using FlowerShopFileImplement.Implements; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopFileImplement.Implements +{ + 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 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; + } + 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); + } + + } +} diff --git a/FlowerShopFileImplement/Client.cs b/FlowerShopFileImplement/Client.cs index 337bd99..f64e572 100644 --- a/FlowerShopFileImplement/Client.cs +++ b/FlowerShopFileImplement/Client.cs @@ -4,19 +4,25 @@ using FlowerShopDataModels.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 FlowerShopFileImplement.Models { - public class Client : IClientModel + [DataContract] + public class Client : IClientModel { - public int Id { get; private set; } - public string ClientFIO { get; private set; } = string.Empty; - public string Email { get; set; } = string.Empty; - public string Password { get; set; } = string.Empty; - public static Client? Create(ClientBindingModel model) + [DataMember] + public int Id { get; private set; } + [DataMember] + public string ClientFIO { get; private 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) { if (model == null) { diff --git a/FlowerShopFileImplement/Component.cs b/FlowerShopFileImplement/Component.cs index 9353091..5ec77b8 100644 --- a/FlowerShopFileImplement/Component.cs +++ b/FlowerShopFileImplement/Component.cs @@ -1,17 +1,21 @@ using FlowerShopContracts.BindingModels; using FlowerShopContracts.ViewModels; using FlowerShopDataModels.Models; - +using System.Runtime.Serialization; using System.Xml.Linq; namespace FlowerShopFileImplement.Models { - public class Component : IComponentModel + [DataContract] + public class Component : IComponentModel { - public int Id { get; private set; } - public string ComponentName { get; private set; } = string.Empty; - public double Cost { get; set; } - public static Component? Create(ComponentBindingModel model) + [DataMember] + public int Id { get; set; } + [DataMember] + public string ComponentName { get; set; } = string.Empty; + [DataMember] + public double Cost { get; set; } + public static Component? Create(ComponentBindingModel model) { if (model == null) { diff --git a/FlowerShopFileImplement/FileImplementationExtension.cs b/FlowerShopFileImplement/FileImplementationExtension.cs new file mode 100644 index 0000000..9a5daa3 --- /dev/null +++ b/FlowerShopFileImplement/FileImplementationExtension.cs @@ -0,0 +1,32 @@ +using FlowerShopContracts.DI; +using FlowerShopContracts.StoragesContracts; +using FlowerShopFileImplement.Implements; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopFileImplement +{ + public class FileImplementationExtension : 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/FlowerShopFileImplement/Flower.cs b/FlowerShopFileImplement/Flower.cs index 71dd4b5..60a3ff5 100644 --- a/FlowerShopFileImplement/Flower.cs +++ b/FlowerShopFileImplement/Flower.cs @@ -2,18 +2,23 @@ using FlowerShopContracts.ViewModels; using FlowerShopDataModels.Models; using FlowerShopFileImplement.Implements; +using System.Runtime.Serialization; using System.Xml.Linq; namespace FlowerShopFileImplement.Models { - public class Flower : IFlowerModel + [DataContract] + public class Flower : IFlowerModel { - public int Id { get; private set; } - public string FlowerName { get; private set; } = string.Empty; - public double Price { get; private set; } - public Dictionary Components { get; private set; } = new(); - private Dictionary? _flowerComponents = - null; - public Dictionary FlowerComponents + [DataMember] + public int Id { get; private set; } + [DataMember] + public string FlowerName { get; private set; } = string.Empty; + [DataMember] + public double Price { get; private set; } + public Dictionary Components { get; private set; } = new(); + private Dictionary? _flowerComponents =null; + [DataMember] + public Dictionary FlowerComponents { get { diff --git a/FlowerShopFileImplement/FlowerShopFileImplement.csproj b/FlowerShopFileImplement/FlowerShopFileImplement.csproj index ca6fa62..3b5a66b 100644 --- a/FlowerShopFileImplement/FlowerShopFileImplement.csproj +++ b/FlowerShopFileImplement/FlowerShopFileImplement.csproj @@ -10,5 +10,9 @@ + + + + diff --git a/FlowerShopFileImplement/Implementer.cs b/FlowerShopFileImplement/Implementer.cs index fe608a9..5ac0410 100644 --- a/FlowerShopFileImplement/Implementer.cs +++ b/FlowerShopFileImplement/Implementer.cs @@ -4,18 +4,25 @@ using FlowerShopDataModels.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 FlowerShopFileImplement.Models { + [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; set; } = string.Empty; + [DataMember] public int Qualification { get; set; } = 0; + [DataMember] public int WorkExperience { get; set; } = 0; public static Implementer? Create(ImplementerBindingModel model) { diff --git a/FlowerShopFileImplement/MessageInfo.cs b/FlowerShopFileImplement/MessageInfo.cs index 26f4cf5..671e24a 100644 --- a/FlowerShopFileImplement/MessageInfo.cs +++ b/FlowerShopFileImplement/MessageInfo.cs @@ -4,26 +4,29 @@ using FlowerShopDataModels.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 FlowerShopFileImplement.Models { + [DataContract] public class MessageInfo : IMessageInfoModel { + [DataMember] public string MessageId { get; private set; } = string.Empty; - + [DataMember] public int? ClientId { get; private set; } - + [DataMember] public string SenderName { get; private set; } = string.Empty; - + [DataMember] public DateTime DateDelivery { get; private set; } = DateTime.Now; - + [DataMember] public string Subject { get; private set; } = string.Empty; - + [DataMember] public string Body { get; private set; } = string.Empty; - + public int Id => throw new NotImplementedException(); public static MessageInfo? Create(MessageInfoBindingModel model) { if (model == null) diff --git a/FlowerShopFileImplement/Order.cs b/FlowerShopFileImplement/Order.cs index 57117d1..28321d7 100644 --- a/FlowerShopFileImplement/Order.cs +++ b/FlowerShopFileImplement/Order.cs @@ -3,21 +3,31 @@ using FlowerShopContracts.ViewModels; using FlowerShopDataModels.Enums; using FlowerShopDataModels; using System.Xml.Linq; +using System.Runtime.Serialization; namespace FlowerShopFileImplement.Models { - public class Order : IOrderModel + [DataContract] + public class Order : IOrderModel { - public int Id { get; private set; } - public int FlowerId { get; private set; } - public int Count { get; private set; } - public double Sum { get; private set; } - public OrderStatus Status { get; private set; } - public DateTime DateCreate { get; private set; } - public DateTime? DateImplement { get; private set; } - public int ClientId { get; private set; } + [DataMember] + public int Id { get; private set; } + [DataMember] + public int FlowerId { get; private set; } + [DataMember] public int? ImplementerId { get; private set; } = null; - + [DataMember] + public OrderStatus Status { get; private set; } + [DataMember] + public int Count { get; private set; } + [DataMember] + public double Sum { get; private set; } + [DataMember] + public DateTime DateCreate { get; private set; } + [DataMember] + public DateTime? DateImplement { get; private set; } + [DataMember] + public int ClientId { get; private set; } public static Order? Create(OrderBindingModel model) { diff --git a/FlowerShopListImplement/BackUpInfo.cs b/FlowerShopListImplement/BackUpInfo.cs new file mode 100644 index 0000000..805ace9 --- /dev/null +++ b/FlowerShopListImplement/BackUpInfo.cs @@ -0,0 +1,22 @@ +using FlowerShopContracts.StoragesContracts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopListImplement.Implements +{ + 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/FlowerShopListImplement/FlowerShopListImplement.csproj b/FlowerShopListImplement/FlowerShopListImplement.csproj index ca6fa62..6fc841a 100644 --- a/FlowerShopListImplement/FlowerShopListImplement.csproj +++ b/FlowerShopListImplement/FlowerShopListImplement.csproj @@ -11,4 +11,9 @@ + + + + + diff --git a/FlowerShopListImplement/ListImplementationExtension.cs b/FlowerShopListImplement/ListImplementationExtension.cs new file mode 100644 index 0000000..f7f30c7 --- /dev/null +++ b/FlowerShopListImplement/ListImplementationExtension.cs @@ -0,0 +1,32 @@ +using FlowerShopContracts.DI; +using FlowerShopContracts.StoragesContracts; +using FlowerShopListImplement.Implements; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FlowerShopListImplement +{ + 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(); + } + } +} diff --git a/FlowerShopListImplement/MessageInfo.cs b/FlowerShopListImplement/MessageInfo.cs index e0004ee..92b0206 100644 --- a/FlowerShopListImplement/MessageInfo.cs +++ b/FlowerShopListImplement/MessageInfo.cs @@ -12,7 +12,7 @@ namespace FlowerShopListImplement.Models public class MessageInfo : IMessageInfoModel { public string MessageId { get; private set; } = string.Empty; - + public int Id => throw new NotImplementedException(); public int? ClientId { get; private set; } public string SenderName { get; private set; } = string.Empty; diff --git a/ProjectFlowerShop/DataGridViewExtension.cs b/ProjectFlowerShop/DataGridViewExtension.cs new file mode 100644 index 0000000..9649e21 --- /dev/null +++ b/ProjectFlowerShop/DataGridViewExtension.cs @@ -0,0 +1,54 @@ +using FlowerShopContracts.Attributes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ProjectFlowerShop +{ + 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/ProjectFlowerShop/FormClients.cs b/ProjectFlowerShop/FormClients.cs index 48a61a6..b740633 100644 --- a/ProjectFlowerShop/FormClients.cs +++ b/ProjectFlowerShop/FormClients.cs @@ -31,16 +31,10 @@ namespace ProjectFlowerShop var list = _logic.ReadList(null); if (list != null) { - DataGridView.DataSource = list; - DataGridView.Columns["Id"].Visible = false; - DataGridView.Columns["ClientFIO"].AutoSizeMode = - DataGridViewAutoSizeColumnMode.Fill; - DataGridView.Columns["Email"].AutoSizeMode = - DataGridViewAutoSizeColumnMode.Fill; - DataGridView.Columns["Password"].AutoSizeMode = - DataGridViewAutoSizeColumnMode.Fill; - } - _logger.LogInformation("Загрузка клиентов"); + DataGridView.FillandConfigGrid(list); + _logger.LogInformation("Загрузка клиентов"); + } + _logger.LogInformation("Загрузка клиентов"); } catch (Exception ex) { diff --git a/ProjectFlowerShop/FormComponents.cs b/ProjectFlowerShop/FormComponents.cs index 051a3d1..8284981 100644 --- a/ProjectFlowerShop/FormComponents.cs +++ b/ProjectFlowerShop/FormComponents.cs @@ -1,5 +1,6 @@ using FlowerShopContracts.BindingModels; using FlowerShopContracts.BusinessLogicsContracts; +using FlowerShopContracts.DI; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; @@ -32,16 +33,9 @@ namespace ProjectFlowerShop { try { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["Id"].Visible = false; - dataGridView.Columns["ComponentName"].AutoSizeMode = - DataGridViewAutoSizeColumnMode.Fill; - } - _logger.LogInformation("Загрузка компонентов"); - } + dataGridView.FillandConfigGrid(_logic.ReadList(null)); + _logger.LogInformation("Загрузка компонентов"); + } catch (Exception ex) { _logger.LogError(ex, "Ошибка загрузки компонентов"); @@ -52,8 +46,8 @@ namespace ProjectFlowerShop private void buttonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(ComponentForm)); - if (service is ComponentForm form) + var service = DependencyManager.Instance.Resolve(); + if (service is ComponentForm form) { if (form.ShowDialog() == DialogResult.OK) { @@ -67,8 +61,8 @@ namespace ProjectFlowerShop if (dataGridView.SelectedRows.Count == 1) { var service = - Program.ServiceProvider?.GetService(typeof(ComponentForm)); - if (service is ComponentForm form) + DependencyManager.Instance.Resolve(); + if (service is ComponentForm form) { form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value); diff --git a/ProjectFlowerShop/FormFlower.cs b/ProjectFlowerShop/FormFlower.cs index 40ad362..c78fcaa 100644 --- a/ProjectFlowerShop/FormFlower.cs +++ b/ProjectFlowerShop/FormFlower.cs @@ -12,6 +12,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using FlowerShopContracts.DI; namespace ProjectFlowerShop { @@ -95,7 +96,8 @@ namespace ProjectFlowerShop private void buttonAdd_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormFlowerComponent)); + var service = + DependencyManager.Instance.Resolve(); if (service is FormFlowerComponent form) { if (form.ShowDialog() == DialogResult.OK) @@ -123,8 +125,7 @@ namespace ProjectFlowerShop { if (dataGridView.SelectedRows.Count == 1) { - var service = - Program.ServiceProvider?.GetService(typeof(FormFlowerComponent)); + var service =DependencyManager.Instance.Resolve(); if (service is FormFlowerComponent form) { int id = diff --git a/ProjectFlowerShop/FormFlowers.cs b/ProjectFlowerShop/FormFlowers.cs index 49c1b87..7cfcbdb 100644 --- a/ProjectFlowerShop/FormFlowers.cs +++ b/ProjectFlowerShop/FormFlowers.cs @@ -11,6 +11,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using FlowerShopContracts.DI; namespace ProjectFlowerShop { @@ -34,15 +35,8 @@ namespace ProjectFlowerShop { try { - var list = _logic.ReadList(null); - if (list != null) - { - DataGridView.DataSource = list; - DataGridView.Columns["Id"].Visible = false; - DataGridView.Columns["FlowerName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - DataGridView.Columns["FlowerComponents"].Visible = false; - } - _logger.LogInformation("Загрузка цветов"); + DataGridView.FillandConfigGrid(_logic.ReadList(null)); + _logger.LogInformation("Загрузка цветов"); } catch (Exception ex) { @@ -53,8 +47,8 @@ namespace ProjectFlowerShop private void AddButton_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormFlower)); - if (service is FormFlower form) + var service =DependencyManager.Instance.Resolve(); + if (service is FormFlower form) { if (form.ShowDialog() == DialogResult.OK) { @@ -67,8 +61,8 @@ namespace ProjectFlowerShop { if (DataGridView.SelectedRows.Count == 1) { - var service = Program.ServiceProvider?.GetService(typeof(FormFlower)); - if (service is FormFlower form) + var service =DependencyManager.Instance.Resolve(); + if (service is FormFlower form) { var tmp = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value); form.Id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells["Id"].Value); diff --git a/ProjectFlowerShop/FormViewMail.cs b/ProjectFlowerShop/FormViewMail.cs index 8e3d10d..fbdb38c 100644 --- a/ProjectFlowerShop/FormViewMail.cs +++ b/ProjectFlowerShop/FormViewMail.cs @@ -27,14 +27,7 @@ namespace ProjectFlowerShop { try { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridView.DataSource = list; - dataGridView.Columns["ClientId"].Visible = false; - dataGridView.Columns["MessageId"].Visible = false; - dataGridView.Columns["Body"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } + dataGridView.FillandConfigGrid(_logic.ReadList(null)); _logger.LogInformation("Загрузка списка писем"); } catch (Exception ex) diff --git a/ProjectFlowerShop/ImplementersForm.cs b/ProjectFlowerShop/ImplementersForm.cs index 047bae4..c010109 100644 --- a/ProjectFlowerShop/ImplementersForm.cs +++ b/ProjectFlowerShop/ImplementersForm.cs @@ -1,5 +1,6 @@ using FlowerShopContracts.BindingModels; using FlowerShopContracts.BusinessLogicsContracts; +using FlowerShopContracts.DI; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; @@ -33,21 +34,8 @@ namespace ProjectFlowerShop { try { - var list = _logic.ReadList(null); - if (list != null) - { - dataGridView1.DataSource = list; - dataGridView1.Columns["Id"].Visible = false; - dataGridView1.Columns["ImplementerFIO"].AutoSizeMode = - DataGridViewAutoSizeColumnMode.Fill; - dataGridView1.Columns["Password"].AutoSizeMode = - DataGridViewAutoSizeColumnMode.Fill; - dataGridView1.Columns["Qualification"].AutoSizeMode = - DataGridViewAutoSizeColumnMode.Fill; - dataGridView1.Columns["WorkExperience"].AutoSizeMode = - DataGridViewAutoSizeColumnMode.Fill; - } - _logger.LogInformation("Загрузка компонентов"); + dataGridView1.FillandConfigGrid(_logic.ReadList(null)); + _logger.LogInformation("Загрузка исполнителей"); } catch (Exception ex) { @@ -58,7 +46,7 @@ namespace ProjectFlowerShop } private void CreateButton_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(ImplementerForm)); + var service =DependencyManager.Instance.Resolve(); if (service is ImplementerForm form) { if (form.ShowDialog() == DialogResult.OK) @@ -73,7 +61,7 @@ namespace ProjectFlowerShop if (dataGridView1.SelectedRows.Count == 1) { var service = - Program.ServiceProvider?.GetService(typeof(ImplementerForm)); + DependencyManager.Instance.Resolve(); if (service is ImplementerForm form) { form.Id = diff --git a/ProjectFlowerShop/MainForm.Designer.cs b/ProjectFlowerShop/MainForm.Designer.cs index 07caf38..5a7cc1d 100644 --- a/ProjectFlowerShop/MainForm.Designer.cs +++ b/ProjectFlowerShop/MainForm.Designer.cs @@ -35,6 +35,7 @@ клиентыToolStripMenuItem = new ToolStripMenuItem(); исполнителиToolStripMenuItem = new ToolStripMenuItem(); стартРаботToolStripMenuItem = new ToolStripMenuItem(); + почтаToolStripMenuItem = new ToolStripMenuItem(); отчетыToolStripMenuItem = new ToolStripMenuItem(); списокКомпонентовToolStripMenuItem = new ToolStripMenuItem(); компонентыToolStripMenuItem = new ToolStripMenuItem(); @@ -45,7 +46,7 @@ ReadyButton = new Button(); IssuedButton = new Button(); RefreshButton = new Button(); - почтаToolStripMenuItem = new ToolStripMenuItem(); + создатьБэкапToolStripMenuItem = new ToolStripMenuItem(); menuStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)DataGridView).BeginInit(); SuspendLayout(); @@ -62,7 +63,7 @@ // // ToolStripMenu // - ToolStripMenu.DropDownItems.AddRange(new ToolStripItem[] { КомпонентыStripMenuItem, ЦветыStripMenuItem, клиентыToolStripMenuItem, исполнителиToolStripMenuItem, стартРаботToolStripMenuItem, почтаToolStripMenuItem }); + ToolStripMenu.DropDownItems.AddRange(new ToolStripItem[] { КомпонентыStripMenuItem, ЦветыStripMenuItem, клиентыToolStripMenuItem, исполнителиToolStripMenuItem, стартРаботToolStripMenuItem, почтаToolStripMenuItem, создатьБэкапToolStripMenuItem }); ToolStripMenu.Name = "ToolStripMenu"; ToolStripMenu.Size = new Size(117, 24); ToolStripMenu.Text = "Справочники"; @@ -102,6 +103,13 @@ стартРаботToolStripMenuItem.Text = "Старт работ"; стартРаботToolStripMenuItem.Click += стартРаботToolStripMenuItem_Click; // + // почтаToolStripMenuItem + // + почтаToolStripMenuItem.Name = "почтаToolStripMenuItem"; + почтаToolStripMenuItem.Size = new Size(224, 26); + почтаToolStripMenuItem.Text = "Почта"; + почтаToolStripMenuItem.Click += почтаToolStripMenuItem_Click; + // // отчетыToolStripMenuItem // отчетыToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { списокКомпонентовToolStripMenuItem, компонентыToolStripMenuItem, списокЗаказовToolStripMenuItem }); @@ -189,12 +197,12 @@ RefreshButton.UseVisualStyleBackColor = true; RefreshButton.Click += RefreshButton_Click; // - // почтаToolStripMenuItem + // создатьБэкапToolStripMenuItem // - почтаToolStripMenuItem.Name = "почтаToolStripMenuItem"; - почтаToolStripMenuItem.Size = new Size(224, 26); - почтаToolStripMenuItem.Text = "Почта"; - почтаToolStripMenuItem.Click += почтаToolStripMenuItem_Click; + создатьБэкапToolStripMenuItem.Name = "создатьБэкапToolStripMenuItem"; + создатьБэкапToolStripMenuItem.Size = new Size(224, 26); + создатьБэкапToolStripMenuItem.Text = "Создать Бэкап"; + создатьБэкапToolStripMenuItem.Click += создатьБэкапToolStripMenuItem_Click; // // MainForm // @@ -239,5 +247,6 @@ private ToolStripMenuItem исполнителиToolStripMenuItem; private ToolStripMenuItem стартРаботToolStripMenuItem; private ToolStripMenuItem почтаToolStripMenuItem; + private ToolStripMenuItem создатьБэкапToolStripMenuItem; } } \ No newline at end of file diff --git a/ProjectFlowerShop/MainForm.cs b/ProjectFlowerShop/MainForm.cs index 103496a..1c58a5a 100644 --- a/ProjectFlowerShop/MainForm.cs +++ b/ProjectFlowerShop/MainForm.cs @@ -1,6 +1,7 @@ using FlowerShopBusinessLogic; using FlowerShopContracts.BindingModels; using FlowerShopContracts.BusinessLogicsContracts; +using FlowerShopContracts.DI; using FlowerShopDataModels; using FlowerShopDataModels.Enums; using Microsoft.Extensions.Logging; @@ -23,18 +24,21 @@ namespace ProjectFlowerShop private readonly IOrderLogic _orderLogic; private readonly IReportLogic _reportLogic; private readonly IWorkProcess _workProcess; - public MainForm(ILogger logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess) + private readonly IBackUpLogic _backUpLogic; + public MainForm(ILogger logger, IOrderLogic orderLogic, IReportLogic reportLogic, + IWorkProcess workProcess, IBackUpLogic backUpLogic) { InitializeComponent(); _logger = logger; _orderLogic = orderLogic; _reportLogic = reportLogic; _workProcess = workProcess; + _backUpLogic = backUpLogic; } private void КомпонентыStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormComponents)); + var service = DependencyManager.Instance.Resolve(); if (service is FormComponents form) { form.ShowDialog(); @@ -52,15 +56,7 @@ namespace ProjectFlowerShop _logger.LogInformation("Загрузка заказов"); try { - var list = _orderLogic.ReadList(null); - if (list != null) - { - DataGridView.DataSource = list; - DataGridView.Columns["FlowerId"].Visible = false; - DataGridView.Columns["ClientId"].Visible = false; - DataGridView.Columns["ImplementerId"].Visible = false; - DataGridView.Columns["FlowerName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; - } + DataGridView.FillandConfigGrid(_orderLogic.ReadList(null)); _logger.LogInformation("Загрузка заказов"); } catch (Exception ex) @@ -72,7 +68,7 @@ namespace ProjectFlowerShop private void ЦветыStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormFlowers)); + var service = DependencyManager.Instance.Resolve(); if (service is FormFlowers form) { form.ShowDialog(); @@ -81,7 +77,7 @@ namespace ProjectFlowerShop private void CreateOrderButton_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder)); + var service = DependencyManager.Instance.Resolve(); if (service is FormCreateOrder form) { form.ShowDialog(); @@ -204,7 +200,7 @@ namespace ProjectFlowerShop private void компонентыToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormReportFlowerComponent)); + var service = DependencyManager.Instance.Resolve(); if (service is FormReportFlowerComponent form) { form.ShowDialog(); @@ -214,7 +210,7 @@ namespace ProjectFlowerShop private void списокЗаказовToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormReportOrders)); + var service = DependencyManager.Instance.Resolve(); if (service is FormReportOrders form) { form.ShowDialog(); @@ -223,7 +219,7 @@ namespace ProjectFlowerShop private void клиентыToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormClients)); + var service = DependencyManager.Instance.Resolve(); if (service is FormClients form) { form.ShowDialog(); @@ -232,14 +228,14 @@ namespace ProjectFlowerShop 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); } private void исполнителиToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(ImplementersForm)); + var service = DependencyManager.Instance.Resolve(); if (service is ImplementersForm form) { form.ShowDialog(); @@ -248,11 +244,36 @@ namespace ProjectFlowerShop private void почтаToolStripMenuItem_Click(object sender, EventArgs e) { - var service = Program.ServiceProvider?.GetService(typeof(FormViewMail)); + var service = DependencyManager.Instance.Resolve(); if (service is FormViewMail form) { form.ShowDialog(); } } + + private void создатьБэкапToolStripMenuItem_Click(object sender, EventArgs e) + { + try + { + if (_backUpLogic != null) + { + var fbd = new FolderBrowserDialog(); + if (fbd.ShowDialog() == DialogResult.OK) + { + _backUpLogic.CreateBackUp(new BackUpSaveBinidngModel + { + FolderName = fbd.SelectedPath + }); + MessageBox.Show("Бекап создан", "Сообщение", + MessageBoxButtons.OK, MessageBoxIcon.Information); + } + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, + MessageBoxIcon.Error); + } + } } } diff --git a/ProjectFlowerShop/Program.cs b/ProjectFlowerShop/Program.cs index a8daa98..05b7a34 100644 --- a/ProjectFlowerShop/Program.cs +++ b/ProjectFlowerShop/Program.cs @@ -14,13 +14,13 @@ using FlowerShopBusinessLogic; using FlowerShopBusinessLogic.OfficePackage.Implements; using FlowerShopBusinessLogic.OfficePackage; using FlowerShopContracts.BindingModels; +using FlowerShopContracts.DI; namespace ProjectFlowerShop { internal static class Program { - private static ServiceProvider? _serviceProvider; - public static ServiceProvider? ServiceProvider => _serviceProvider; + /// /// The main entry point for the application. /// @@ -29,12 +29,11 @@ namespace ProjectFlowerShop { ApplicationConfiguration.Initialize(); var services = new ServiceCollection(); - ConfigureServices(services); - _serviceProvider = services.BuildServiceProvider(); + InitDependency(); try { var mailSender = - _serviceProvider.GetService(); + DependencyManager.Instance.Resolve(); mailSender?.MailConfig(new MailConfigBindingModel { MailLogin = @@ -59,54 +58,52 @@ namespace ProjectFlowerShop } catch (Exception ex) { - var logger = _serviceProvider.GetService(); + var logger = DependencyManager.Instance.Resolve(); logger?.LogError(ex, "Ошибка работы с почтой"); } - Application.Run(_serviceProvider.GetRequiredService()); - } - private static void ConfigureServices(ServiceCollection services) - { - services.AddLogging(option => - { - option.SetMinimumLevel(LogLevel.Information); - option.AddNLog("nlog.config"); - }); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + Application.Run(DependencyManager.Instance.Resolve()); + } - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); + private static void InitDependency() + { + DependencyManager.InitDependency(); + DependencyManager.Instance.AddLogging(option => + { + option.SetMinimumLevel(LogLevel.Information); + option.AddNLog("nlog.config"); + }); + 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(); - 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(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + } + + private static void MailCheck(object obj) => DependencyManager.Instance.Resolve()?.MailCheck(); - services.AddSingleton(); - services.AddTransient(); - services.AddTransient(); - services.AddTransient(); - } - private static void MailCheck(object obj) =>ServiceProvider?.GetService()?.MailCheck(); } } -- 2.25.1 From a937d4b26c21d8b7d45d15ec2bdfc9fdb0f810ab Mon Sep 17 00:00:00 2001 From: antoc0der <1@DESKTOP-K1L8ND3> Date: Wed, 22 May 2024 15:57:04 +0400 Subject: [PATCH 3/7] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=D0=B8=D1=80=D1=83?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=BF=D1=80=D0=B8=D0=B1=D1=8B=D0=BB=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FlowerShopContracts/DI/DependancyManager.cs | 8 +++--- .../DI/ServiceProviderLoader.cs | 26 ++++++++---------- .../FlowerShopContracts.csproj | 2 +- .../DatabaseImplementationExtension.cs | 1 + .../FlowerShopContracts.dll | Bin 0 -> 30720 bytes .../FlowerShopDataModels.dll | Bin 0 -> 6144 bytes .../FlowerShopDatabaseImplement.dll | Bin 0 -> 74752 bytes .../FlowerShopFileImplement.dll | Bin 0 -> 40448 bytes .../FlowerShopListImplement.dll | Bin 0 -> 26112 bytes 9 files changed, 18 insertions(+), 19 deletions(-) create mode 100644 ImplementationExtensions/FlowerShopContracts.dll create mode 100644 ImplementationExtensions/FlowerShopDataModels.dll create mode 100644 ImplementationExtensions/FlowerShopDatabaseImplement.dll create mode 100644 ImplementationExtensions/FlowerShopFileImplement.dll create mode 100644 ImplementationExtensions/FlowerShopListImplement.dll diff --git a/FlowerShopContracts/DI/DependancyManager.cs b/FlowerShopContracts/DI/DependancyManager.cs index 87294b1..6acf583 100644 --- a/FlowerShopContracts/DI/DependancyManager.cs +++ b/FlowerShopContracts/DI/DependancyManager.cs @@ -20,12 +20,11 @@ namespace FlowerShopContracts.DI { get { - if (_manager == - null) { lock (_locjObject) { _manager = new DependencyManager(); } } - return - _manager; + if (_manager ==null) { lock (_locjObject) { _manager = new DependencyManager(); } } + return _manager; } } + // инициализация библиотек, в которых идут установки зависимостей public static void InitDependency() { var ext = ServiceProviderLoader.GetImplementationExtensions(); @@ -33,6 +32,7 @@ namespace FlowerShopContracts.DI { throw new ArgumentNullException("Отсутствуют компонент для загрузки зависимостей по модулям"); } + // регистрация зависимостей ext.RegisterServices(); } public void AddLogging(Action configure) => diff --git a/FlowerShopContracts/DI/ServiceProviderLoader.cs b/FlowerShopContracts/DI/ServiceProviderLoader.cs index 6e3fddb..65d0476 100644 --- a/FlowerShopContracts/DI/ServiceProviderLoader.cs +++ b/FlowerShopContracts/DI/ServiceProviderLoader.cs @@ -12,28 +12,26 @@ namespace FlowerShopContracts.DI public static IImplementationExtension? GetImplementationExtensions() { IImplementationExtension? source = null; - var files = - Directory.GetFiles(TryGetImplementationExtensionsFolder(), "*.dll", - SearchOption.AllDirectories); - foreach (var file in files.Distinct()) + // массив строк, представляющий пути ко всем файлам длл в этой директории и подпапках + 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) { - source = - (IImplementationExtension)Activator.CreateInstance(t)!; + // создаем экземпляр этого класса + source = (IImplementationExtension)Activator.CreateInstance(t)!; } else - { - var newSource = - (IImplementationExtension)Activator.CreateInstance(t)!; - if (newSource.Priority > - source.Priority) + { // сравнение приоритетов текущего и нового экземпляра + var newSource = (IImplementationExtension)Activator.CreateInstance(t)!; + if (newSource.Priority > source.Priority) { source = newSource; } diff --git a/FlowerShopContracts/FlowerShopContracts.csproj b/FlowerShopContracts/FlowerShopContracts.csproj index 66f451b..8f5b718 100644 --- a/FlowerShopContracts/FlowerShopContracts.csproj +++ b/FlowerShopContracts/FlowerShopContracts.csproj @@ -7,7 +7,7 @@ - + diff --git a/FlowerShopDatabaseImplement/DatabaseImplementationExtension.cs b/FlowerShopDatabaseImplement/DatabaseImplementationExtension.cs index fe8e84a..9fb1449 100644 --- a/FlowerShopDatabaseImplement/DatabaseImplementationExtension.cs +++ b/FlowerShopDatabaseImplement/DatabaseImplementationExtension.cs @@ -12,6 +12,7 @@ namespace FlowerShopDatabaseImplement public class DatabaseImplementationExtension : IImplementationExtension { public int Priority => 2; + // регистрация зависимостей в контейнере dependency manager public void RegisterServices() { DependencyManager.Instance.RegisterType(); diff --git a/ImplementationExtensions/FlowerShopContracts.dll b/ImplementationExtensions/FlowerShopContracts.dll new file mode 100644 index 0000000000000000000000000000000000000000..a11c84aab2ecd645896ad183d94d9f8cff68eda0 GIT binary patch literal 30720 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 literal 0 HcmV?d00001 diff --git a/ImplementationExtensions/FlowerShopDatabaseImplement.dll b/ImplementationExtensions/FlowerShopDatabaseImplement.dll new file mode 100644 index 0000000000000000000000000000000000000000..0a3b7189911ba49d2bd569977c9bcb46dc175ede GIT binary patch literal 74752 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 literal 0 HcmV?d00001 diff --git a/ImplementationExtensions/FlowerShopFileImplement.dll b/ImplementationExtensions/FlowerShopFileImplement.dll new file mode 100644 index 0000000000000000000000000000000000000000..a596dbbc15df13e500cc6742dfd7a55fdd681256 GIT binary patch literal 40448 zcmeIb3w%`7^*_4KnVB<_nM{(IBtw7zi3S)*jJ$lHNQnd_3dkcWR4ok2fYBraGYLX@ zI1y0eqrR&8nfxn3>4W{I)o3~x*Z?S-yEV-J*1#- zq5b^FzL^xDThYkSDk4PjfAx2inT!#IY4RG4m?N&43v=TWzT3CKsDJWoTi_c)!)O2G zaAGoQE}vr3*|rDCI7}uoC|*w*hpL04+Z-I>aqxf#M;bZ&AmfwaX@z(?*4zRMelUF7 z1OWqP6hja&U`sIs0RsjVLlF4uqlNGnKE}wbIAVmYh5%JW>SyIDk;LQ83@+hJ5hpZ= z1QQWWj9?ou;Rx_sS%A&biVGOg! zGSF3Lp*=*VJ;_cSM&>%E`)CHP=!+QnRGWQNKhg9_`;t-#2yS0etb*Y7CB@9-H*@1a zj5m`QC|0HhI6{*QGf}Gvq_dSdN)sha9L>aJ#M>eaZu!g3v^^bl4Td^$%?*k&esv4j zxjGcRbNmQ5AgZ$5c;Q#M!7!6j?*#C*aHJazGbw(!!W;q>p8Pp;dlJ`eoG=>YRM99W zi6`ICB`SFYK{g=*iXjLX=sd*`gvW!AK7!UFK@0Qi*c@WT`85f(bEqZ1FoePxB!v+5 zOrWQAO2L+&HV$WNt+wTcZ*Wd&``Od%h-ciK($(>FH8`h|4TD^O4<;dQgL7vTGK78S zgtiC-`<@ivCqI%q1_Uw$gU8A=0_Su=K3SP#HGvUeWw3B?hH%U*x(HWvNi5rCdo^;H z9AS%vIpQ=>)!^ia(>OE9m4)M!oQnFCTxG&y-RInuo<2ujs~!~uU5w$O7=nO-q*Dw* zz`&SM3_;MI09}CgAg_=ETabo+HR#UFJqlkU6ii-$>$WBcOf#7Tz8youKmM2z6SkiS z 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 E0nERrWB>pF literal 0 HcmV?d00001 diff --git a/ImplementationExtensions/FlowerShopListImplement.dll b/ImplementationExtensions/FlowerShopListImplement.dll new file mode 100644 index 0000000000000000000000000000000000000000..1052300040b327e62aa305288d0937003ace1b63 GIT binary patch literal 26112 zcmeHw4SZD9weLFT%$)g1GLuX~5C}SffMXJ3l#haG+`Tj>>)+S2O1BHBu;S7>d$-dFqN*4EP7da+tt_4c*)^HF>8{ny(2oH>)E zXz%;o_j|whdt+yv^|jYtYwf-E-shYNU3~RjWD!vS-}l}ldJ#@Ax> zc;toZCyhlfR4?Dql}q+zo%PvtPqHK3+w1fv*JhI0f!<_SZ?bi1d$Pyr%rumgL~FF^ z%jOd;GAz3Aj>rDN?d>>CN){Q7MAw32EAIHMxF+!(#Fwa4a8vos4EA3>hXKLok40;4 zV^#iN{;El4;q%-UqNR)s5`B>qG5oWKs2IFQZzftkTy`otNfh?U!=M-X=!X8xjs2jL z*D%1BW7U2GlTVUpO+z-9?Eodd4Fcgn*Wl~>G-0?JvYBoNitH=x!Iy1y;_Le~5zX_F zg1(FR`NO`M6r^Me(Ot8N4B`IuV3L`N5k;wXtwzkTJLkgOluB#&Ru~P`Ug!#}5j1=b z)ShnMj2Hv8lT2%?AYcSth9F>IRwxZYzzDevLBK%rm4+Z-L|ld-<&7rI*WsC|IJ-<{ z4ihDsf=L^A8RKZoc!F_gFka3$(#&`T<7i}4Eo`yP$+#lSGP=b=e-$T9QK&XriALOJg`4Ko7}%?H(7ui|j+A&f+Iu)M6;H z;2L!%Xkt7Q6Pb`?a2{sBE@CVrOWC!k?o87X8!52?f^DS41_-v15*xK|<-m+iF;kT= z=~Mwn_bGI5b0@%sm@#=(M1mkhl!Iaj0tRYA zF$4hvg`pUNz-M>fV6GPCVQ%h2Z~&pF;DR#^IOpLkCeGFb$|UNXqX}d!>P%gKXWTv&Bg;bFdxV%F+4~ zhjLa~5Cmz#I#wvy&U|_;4h9Hv1mB=URyfBY#x%uECb?`9i%wY`> zNL180UlXXWsB?iPW-@`9DQdHrXl6pqG_@{)F?_DgK=#;XN^F8)n<=pgf^DY6CJ45f z5}U}q_e#s3Nk(iucJ31!&o>JUl1^`HYkQ5U|MR4!ICYT{BRAQs7DCg2Pbeo|+d^QTeH zkeNb*=vK~+=5kgv%K7k(K@z0w?1CV1)hc z0>)IAAqW^}x(q?Uz+$7C2!ecZ?snoD9zI@Ma~qKX3=z^Eb*==?%QRf;>U__&QDibvfMbyb?0s|j))@!1jiPf6G2u7VW6aHHK2z;~HxBT8XfFfh3 zQsNW{b}A)KfncXn;uHw(ASE4u;0{vK0SI9G69YdYnXtGLR`%RfDo&gfWJblWda-_I+=irLabu~ zCNUlJ2OHA0tgoJ6nVxxMrV?nk73+Qg{!hSJ0|8Nl^O-|hqERw$W}#EW=HXl(ZP zbO!|cCSYK)Y)J z3Kg}PLn~ejSmp!~w$l%eS_=k%$yxxR?OYE^)`A;=xN8B504eNg3&y$^Gp8xAjbpL<;H;-4;ezkjOS^<0@oO+ER!@)G<*v1794J*zLb zoXzO12=kkZ7xNj#g`3+jRTR(OhZZB!R#KNm|Jr4rsc98hl=A+|+AwWKq51l1=uDCr z-Cp(Lpt@g;&Qag8$`$eQ$59vaoab=s;;p=Al|VK<|)Q? z$>(iVx>~h9Hp+k5w{&|uUyw06>9!{>bhKp zYq-x*scZI`*FTj@9I||MjUA8cnmf^TEgtK-_Ia!dNY9m#bzQ;z>$>*EumznJ^sDQ7 zm-7S0b^*Vxe9{w!xZY>cSuLLXFJvk$7S8{mX$IJ~ZX?(r-a|8!mZ{d=Ff z9?SmuJmb2)4ZWYTu7|tKb*)|YnUcEB`|s7Y-@Mdyy~OCUPhHm>wXSQ4Sl6{L;#1c( zjzv<}I}jt+bzvxKzg9EAk|z*hhrKJPYi6LXl?ASAaYWa(&k-v%1Dd1Mwb!TZ{0+Nd z^S$v0sOxd;`v{*^U9-#L@+n`}o`UmHj^LDajYxg_^#t}U_c65Mx@MV!z-;GEa8zCI1SWOe z%KVRmlDhr`5Vx+e34f5f{uDMhoGsn{EaxuRP-k}>*FWhJ!;b5PKB+oqpH!Wn2d9*w z;dSnFm+M^o)phRox1i21pr){a#c4iNhsQa*d<@fNs&`sPk_eT&DszI`6QPkkr3f4y&e zKG@DZ=u&!A89Qm{`W~i&`u1@?&4GuNPx<=x6r8_>{M7Y5&8u(R!BMr&4Rf71B6aSC zg(z-%DfJm(Jb6EhEAL-?4e@g=+qn;@y6KCA_(6x8pxxk4<0``a9&+why-JXKztYs6 zpIdytjx!T#9(R4R#uR!|RJRs0g*_=o*lp;kJdg;e``YO)!*c!(3gtlvdVnN?azVu? zMbO<~pEUS1i@U=(KWSj69rTXb%yUs3zen90`W&~*ZJY{i_kMjGIk&sMt7jXNPw6{9 z+fcq2_ULw~pKbU%RJV5e448km!S{BUqg2EFS*dn-FBKwpGT53Ym^XWgvzr&7Cm4PP0jadIS;Y_I#*CW11$rYKDi6$V z0UtxlPL&5SKmEUjmqecwykn1qP=13=~L)8F-j`TW>j!;Oa(eEd(4BYSq&%Ss zoU9x%dPL3GkWB>qA$(WB)J}Y{Ovq;fo==_u`b?RVl5gMf*1czak9CJntCHEzfs1Wd z1~H%q(QPfK*Zd$dTW7?OIkI}%X3IGM-@OLwbcXDNtuk~4?p4$L$%4fvDFrgT!3%@Oy)oYCS}CUF>&$Z2Y8#q&O2BGs{3*K;HNC~8RhICuP<3nxn1 zS06((Bh#ezRaJfJA#_+Kcfq-t6NP*dH?(2 zv)K0$L#y^x_LwVQ1!{g|zpkKYO z4pYIt>f=1Yfve@s_nga9aK6G36r7vY^ZB1(3~{juVrC*TI@WO9Rd#nE#h|DfNJ z8xm8(bN&&ECym-=mOND~Wb%H6y^89Q8%s_(TK)_gMRB;$RYt{4HHcW4ve$E^a_`M8@losL;I{6l&$8lYV=s~1$^1N;?aQR?OGp-!_KqL|a`6pvKRe}Mu1z*fSHbF=;!A+szHvI>_ zh(~^JG!55f_>RMu+XeNNaSRGRFGLx~K+qpT^~E-&!we^f#udlu8iZ)m&7s|4n-+$h zBAZ?gG2A8afWS)OcMAS%{J6!Yf$(plc*7NASQKLTy5NWHagesba+I#5KjQgsWzlZj zeT<7fR-C|s@XO*DogXnvVsuw@eo2C+f*+$L!r3F7VsN6g18r^EOuvc7C?!%yq<@OA zeyMP-7S4~svFSo++SF^a{u^PoKTD+lBl1i1``=@o;G7ixrQpZt8%6Jx*z|GH|7P&L zlBEAxRFukvs)>KMxEZ5gDO6Ud7*4m`?qm_m$}oSJ`i)RyXtq#a5o$aw z5b8%lCGl$|*8FDCl2|jHh566avq42ULVZuDTDo4SF9=mfTZOt?sCwEi)Fz>((Z__k zO{fOKFA@Ed-=RT)z=hhbz^{A&9K=1MZ&SAZ7T3Na14vvt_(a7tfmc! z@zl_!gVBeBmnC_+>^Q9)vmR|d>Z`Dn^{A&neZ-?!_9;b$H^sgI>a&^}jQuxI4{GYZ zlJ5si`m&}TDtQIeFhKoT%Z_25g()zJZ4QNhjyWBs5~1FR9E#qH zcg16b+7bR{v=r3oT6QdOFDh%Qmc0=u1=T3jr|FPA$1bAVm5lDQo9q($C#`vFbb%cs zYcltz{EX2wq27qFpD~&#l=3r17i!rh_PsdgF3_@7b}6W(TJ~IgKm5K@s2$-Kbgq`w!ttrbf7Ii5CZ*+Go$1j=dIw~>_zv_;E!{HkcXP&>jr zepR$n%jN}l;W^qpT6P6$V

XmR(x3i%zG9wCtK91Jt8JaSVO-8FboI@ftDQXrq=D zg&1zNC(+jxB{58*UkLR^q{g@xtMadf8Va9_HE--Z3@(^~eaxB=>ZEwhXE(=_^mmc@!50rjYs-2$5p^rV)33^p6+ zh)_GiO~~Nc^t_fWLk7>Lf6?s@#i|V45oy`8v1y=Q)3OKb6Lb!}tz`%7h;a`6PRnM+ zCmH9`pS5gZd-+2(Gy^vZ$P#k)fIXAGt|*xkGwE5O-Y}kt ze-X0pXzI6t$Lv}3l23Cs{iJ~Uoz^@UKV;9QPTT@uz8DY2zX2-AheS|y@$cGmD8)xb zP`l$lu+OL0HFcl;1N#E%#Hp2KFN3;>-V#c!QqAfJ3faN;*KJ9~wyyf3g?SH-u6>TtYw8vV(CWbO|k-t~4Kv z7lHbPrt0FSg)XHZ&QP-5@#@fG+BH*A_u18Y<$;)v|-}vqJ5Z zX%dh8^(QhTj(nKou*y}bv4~|9&4%|R?%HT zajutzR#CNd z75J{ixh;e5N}SO);ky#&vD@%niC?gN65o~h1=r{CU5Q^qJ%Ll!(>Ompj}yUB+yfoM zz3HpCXL=Lu%8Lzf_*^{>Fp4{!^5Rk~Xbk5FY!=ui@N$7G1*QS{ZneC440|s;5e-u5zQmS=hq{|C)Fdw zXVN3Yr!2(G2(OMG2#>A3DG=3e3m;wd}=#Ed_FS_ zxu-C=7sKGQoni1P&M^4AHbbnH8Qe>m!RMyh@abrrSQsZ3#uAF<`{gInPc#&rCBta4L*A`8+CO`}j(OckGquk)?bh zNJ}qi@i}eqDI|?v81e}rZSdJ6ZSW~0ZSc7uZSV;oZSY<{S8`HA!Q$0MD{YBy0_R@i zdf><6TMWaz8}~DJ7(ANq7;{QLYusV*n1X}6y<^;3a=-D8kt{s~ekD9vMBBq#j74O@ z&LJ7K8nISGZ${rSYUp2M2F`UH*K+B%So&Qh{Vo^HRnqTg44wm@5t~QFPO(Uf#ZIx< zDHc1OVy8;%bc>x%(d-sG`wgBU`^C-)u~Q||DzQ@~cB;fqzu4I#cD9S1e$m`6b`HsG zIV4dZ5^H6W?Jc6SMXYTRYg@!xz1X=^>^v{C;vM75#rGR`inU$R*Yh%Gc8P_0fxCrY zA#L|b+ug$7C#{Z2zsHOd(MiU`lIMpd&*vCVht~&=8DB1%gjw`G!Fe_w!<^X^cw96e z7tLcbTULta6=JzUJg*SXE5!4s;KOeNW#*XpiNLdhe@9?iswr)7<))=B((q>&aGrq; zSfiGO8?Xv}7;pmJ1UQ+t0oKtG!0Ge~;Q90>U<>^L@KWKo1GdnI$%wRIwKF2~v6dYO zrUC6phwwXu-+^C(o*BuAbV&F^w2=~#ZGvwToo&!r61h!u_6UEkhOGG@?n;UQ+5YDR z9v0~l4O!<~!apvYS2bk*Ytr^Lk^W2|8SJy6A?sKM+qVq19~77rX|;x|Gg)*di*$;> zCXqI4$T}^e(<0LO0@sK%ts(1lh)#z{I|1!TM({z=8Pbq7_XxgML*^V7{D_9k`KDO= zrdT*G{8u$(>1!f=O{6~)NT$TDA?sMC#BNIL0;@$@ZL)N-NGA(_ioj-(HjA`Hq%Fdq zFEB0Av`9Nd+9CXmz#(%yO^6JM&XDMA6Z|%j-XYSx!r3d*!-5~tko|d9bdC$>RSlW{ zy70-8=rm-0Qt)aGnbRbAvxdxBBY0Xv<_roxq#<+m2)lTlx z5fD!TEUgy2TJR>pn>A$V8o|>VGG|cmAq|J&4alv2JkU12@kCY=u zP&^4TClF-clENPp{vLt*!7q*+7W}xtSHU@eKLg;lNr6oQ*9aWM^8`DxN8mm@9~p=| zi)TA_ghHY(uqMQuCc)PT>=e$R;Clq_6V745j|+TVI20B;0$amuXS=||!g*HkbTpn*^>A*eU!$!S@KUO7^eeDQU@P7f*pW4Y4+`8aoIQdc7Wk}ijtkBY z3++e%Z!s{Yf;RycM+OD%5tuBWgmG*VxJFK*O-pE*?iD^#{7Z#rg_2)STn85t@YMT)<>;-tVgULTYs?Lv(5_K7Wh)& z>A(wt9|q12@>>9Y4jRHq7|$_ro-M=5UWvV>3TIz_xc2w4XF^0@D)}eC*Gi58E{OdI z@Y^M?0d6h+cfiKd-vi!bFnpU%06rIG_*Q`7w&;HVD(M=VIWNUc+!1bz+JK6Gk?_X_ zng7LDkx0jT(tj44%G$~x_mVDRxGkE5&Mbp%Dm$Mrrh-!~*2+uI2L5i0r6=OblbN2) z0rB?Jaki5v;(k9NoE2i>rP%r4JYlniMe%09ZP7(x{=0WeGG>v9oN@NTfF|-50v-i4 zk-G@+Vn7oaEdm|`G;#k>0=yK^#I79&tVFgAJk!Jh0GfDnHXZmyfF?B& zziVm+G^rK8voP@u$_7YYp zZ29&mykFv7<8XW5#oKm%zgsTw82uijwgTU4@m+^+FTU5~dkelhXp<2OZZfLyt;N#> zeCA%*v3hlDSFW!+y}6}3oy*N$-AHqrJ32DCTzkKhO|Q>fxOVlZymM&DKzDa~ZFgqP zIn*}4cc3Se)zqS{TtAp2?VL*s26{WzoJ%Xx-2<8B1ASFj0@a~C_E z1KpVmX+gJhLnhn4!Rc#pdi%5Kj{aOjYa6Z4^sjE~LBpO*Z+|AcplvDTMzUC|rMn9% zu0oz#PVJj>{h6MI7N@&ABVFejF3$93vRxh2*4C-I=u~DEwHWC@Dj?&&^3*VAwA|;O zwx(jyVvoo>sU^xs5Y3&PG}mVaL0q_T_3C-)j*a-az=Ez!H{@PKBSmeUBYB?JBSpTR zMr-LhJhGwd@JPvJm`gV}*-`ws3~A1cY;dKM-8lcoJ`6&pcQko>rnfVbU6Sq@rLA&s zbXkkj)93VJB8)C>P4{P7vKhdUF3s;rcXf|sw-5A;WL`dy?(SOG)sg0zJW{NapBpJz znnhTn@O@)4id02Bia?FXXaYA6qsWvsFH@svwD+g`2S(!$ti28;G%_sCs~5sZaf>t1 zJ4&k-CpQXrp3}K`qzUe!HPhX7eI`3n%BAH_L8)1fxH!|ld~;uB-e#;bneH}TL)N7` zGE($1HI+I~Qne8D=K9l^k%WeAF21_U#kixwsVnV=u~z4tfh=saxkcE!&e6*&waEsqYwN?FL^5nJAcj`aGw40C|VWtsKZFfv&l7ix8=a#O+j# zO0Pb$HM4eL{rXIHUe>um!s2-f8=3A5F7tcVW;#1Foz4CDmDSn-aM+)&?o3uzduaMZ zp3)V((t8waaTlDjJkQPwFK$vV$_v~UY&qS#IWN#dEd2hiwO!p^{XXfu&3c3vrgL&4pzHZufUQ5he%K^w z&_QDRBlV*>a{5+ZEGu_*`G$1w((L?ASc93n2)nhP(!A+=9Zcm*6^@fGmZ zL@!{evMXe{OKbtx*L!;=o$c7*>)g-q_3dZt+V{281@Gs$9s3*l*BaHOT4^-y>rQi2 zPnuAjxP)t8(Y}aQbY*T(Oi5;*^qJ2yRS$WZ7mbTE{dtD!)knJ>=UF|xZppGB+q0|) z3e%awfsxOjo&yb?-Aca=XFffvyk%uU*6C5}-awC9@NjMO+Dc{2zp+2l%VkIfc8AG0 zmV!fom@DMC>t1G^K6la*C+}#cbN-DTnLa*15Z1Uf_tuWdinRGi$X zle;={E=yN54$o>SZO>${$6lH9R&kG^)FV~)W2~4cC3}myoHBmSpiN%r}jtPg&Otzo<#Yq6Cqf94T5*qj2E-qKj z1|OYuYaoje`x5?lBU!Y>xq)sJj8D>{BnZpcYaEy46zzrKF|e6R-C@_3_BbFrStiU~Jxl(k|-v=8_yc-Qg&BWl-iP>^}J~3CW#}ch_eKoOAu5Tt5 z$@OTWNv=;MW{9OKc*7pWtdL=vc1)N_FiP0D5+Q41Ng9(FFvDZYHk*k|I1Y)QF7^}B zA|oI+Y5ki=6UPHj0MBy(IyYnsE%m;o}(7$P=f6``PK-BjKt(s-O{ z#$vW2%R)9fc0GXa=@|U-=tMda3WiO1mp0LLIfY%fdz4Z#k(BOxlrufr*`(`TkMb_B zZH@`qt}8w+`;qia!jB%$4|D-i`H@WYAaIqq!6Btzlc*6F28Tl4RRXA)pi?wBq`dI8 zFe~$J_}K~gQRCT#AA>`2HzDYV>8NC+23X#eovKMHky0+~)UNDQX-Vm{q&$yyYLD^_ zkr+K#u;ONDa3?#I@~pE%J3WV35wvnB1+N*hm+H{Sn0x5|QAy zHu&&L801xCVvtufS)yev6U=2bdaOp5RpYU0TvnCGs&ZK=kCk#+^&YD}fR(-if1rTm zUc){luEC;~NHZsy=n_sBb9$Illh`U8Kj{X9KVB?Qe1?&lbQ92!Osb`mnn?l zBTD5FVIGJy8WQH|1a@NZP|Wo!jn!D)kdj z-@wm-4CsYqE?;2KX$?!}FK=Y4I0w1_k8?2mjC;x;qDd>xcgoUkFqZ`+%Y{1%iNI>Vx02S-?07nrhJYjrhY# z#8cATjdvc4aR%+e`wcK6ZM_@tKpfAhSZxvhs_*^O;1;?gQ}^_R@iV_j#^TGEw;SKU z7JRP-qCc$0Z;sBycMoKHd@@$yzd`hWmbJIGKiBloSAV(Y&kOdw`>W&s@zsePY@_A8 zRafA&np<_ws@6gcu?zy9LEqaQiCZPmFie(mVs(ViLyvkX79qi%x+p6A7KSty)DK_+VuBG;c&F9XXMcTbtHQGI-AQgD!qP5pf z?Z5NRDgSuQuMnpDiEIUybg9Ct`_G*#E{@mP*6!}bxLc#1TnFY;MxHB(^t~xCGCWm< z*8ZQP_&qk^oiz;>h9+|w@0UmNS#Ke}R}JEgI!}N7S!D4~^H<>A>}tUIc<0-Wcf3pS zPIxu0OYkmvsc1eO_|-}EmXv24f7JCNMNj}&p6C8gD+mKt)A$R@1^9JsH{SKO;hpF@ zazw30S}lh(4Q>wdH1$Kz0i`~V1|Eh{13vXbs|)<~qgc9KbQ%%2`fmo_G9w3gmwg)A zw!mHw^+_L_5m6dcM$9ijj}F}c3Xfc91Moh)7w>{6{qU39u*a<33l4H8_S{HX!O!7M zHv83A;P+o^w-F1g;l;H={K@(9a1MSw(CB^Hk1FVMCi_LV7cq7FBKzz5Z@_!_Zv4mp zmVgPni(qrTSmez0;TO^z;dX2osSN*T{ZQj}8SFdoZ2&p$ z_eF9q@hg|evHgzKl{1>%6Q}QE|Z^PsB aU;OD)|DO?6^0y`b#eMyM^Z(an;C}&N9N!@T literal 0 HcmV?d00001 -- 2.25.1 From a0941fe206e2c56f45d9077ea93ae10898fc9f47 Mon Sep 17 00:00:00 2001 From: antoc0der <1@DESKTOP-K1L8ND3> Date: Thu, 23 May 2024 18:36:45 +0400 Subject: [PATCH 4/7] =?UTF-8?q?=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 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index ca1c7a3..9c21aff 100644 --- a/.gitignore +++ b/.gitignore @@ -69,6 +69,8 @@ ScaffoldingReadMe.txt # StyleCop StyleCopReport.xml +/ProjectFlowerShop/ImplementationExtensions + # Files built by Visual Studio *_i.c *_p.c -- 2.25.1 From eaf4c8ed34c589d82e1fc9d216c72e9adf470b58 Mon Sep 17 00:00:00 2001 From: antoc0der <1@DESKTOP-K1L8ND3> Date: Thu, 23 May 2024 18:39:18 +0400 Subject: [PATCH 5/7] =?UTF-8?q?=D0=BD=D1=83=20=D1=87=D1=82=D0=BE-=D1=82?= =?UTF-8?q?=D0=BE=20=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BF=D1=83=D1=82?= =?UTF-8?q?=D0=B0=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9c21aff..c10ad09 100644 --- a/.gitignore +++ b/.gitignore @@ -69,7 +69,7 @@ ScaffoldingReadMe.txt # StyleCop StyleCopReport.xml -/ProjectFlowerShop/ImplementationExtensions +/ImplementationExtensions # Files built by Visual Studio *_i.c -- 2.25.1 From 6aef031e806bbd0cf7cb61d9b302328cac673cb9 Mon Sep 17 00:00:00 2001 From: antoc0der <1@DESKTOP-K1L8ND3> Date: Thu, 23 May 2024 18:53:47 +0400 Subject: [PATCH 6/7] =?UTF-8?q?=D0=B2=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=8B=D1=82=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index c10ad09..9c21aff 100644 --- a/.gitignore +++ b/.gitignore @@ -69,7 +69,7 @@ ScaffoldingReadMe.txt # StyleCop StyleCopReport.xml -/ImplementationExtensions +/ProjectFlowerShop/ImplementationExtensions # Files built by Visual Studio *_i.c -- 2.25.1 From 8ea831b1d9e6d479a524df1e38a863def53b9ded Mon Sep 17 00:00:00 2001 From: antoc0der <1@DESKTOP-K1L8ND3> Date: Thu, 23 May 2024 19:04:46 +0400 Subject: [PATCH 7/7] =?UTF-8?q?=D0=B7=D0=B0=D0=BD=D0=BE=D0=B2=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FlowerShopContracts.dll | Bin 30720 -> 0 bytes .../FlowerShopDataModels.dll | Bin 6144 -> 0 bytes .../FlowerShopDatabaseImplement.dll | Bin 74752 -> 0 bytes .../FlowerShopFileImplement.dll | Bin 40448 -> 0 bytes .../FlowerShopListImplement.dll | Bin 26112 -> 0 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ImplementationExtensions/FlowerShopContracts.dll delete mode 100644 ImplementationExtensions/FlowerShopDataModels.dll delete mode 100644 ImplementationExtensions/FlowerShopDatabaseImplement.dll delete mode 100644 ImplementationExtensions/FlowerShopFileImplement.dll delete mode 100644 ImplementationExtensions/FlowerShopListImplement.dll diff --git a/ImplementationExtensions/FlowerShopContracts.dll b/ImplementationExtensions/FlowerShopContracts.dll deleted file mode 100644 index a11c84aab2ecd645896ad183d94d9f8cff68eda0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30720 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 diff --git a/ImplementationExtensions/FlowerShopDatabaseImplement.dll b/ImplementationExtensions/FlowerShopDatabaseImplement.dll deleted file mode 100644 index 0a3b7189911ba49d2bd569977c9bcb46dc175ede..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74752 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 diff --git a/ImplementationExtensions/FlowerShopFileImplement.dll b/ImplementationExtensions/FlowerShopFileImplement.dll deleted file mode 100644 index a596dbbc15df13e500cc6742dfd7a55fdd681256..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40448 zcmeIb3w%`7^*_4KnVB<_nM{(IBtw7zi3S)*jJ$lHNQnd_3dkcWR4ok2fYBraGYLX@ zI1y0eqrR&8nfxn3>4W{I)o3~x*Z?S-yEV-J*1#- zq5b^FzL^xDThYkSDk4PjfAx2inT!#IY4RG4m?N&43v=TWzT3CKsDJWoTi_c)!)O2G zaAGoQE}vr3*|rDCI7}uoC|*w*hpL04+Z-I>aqxf#M;bZ&AmfwaX@z(?*4zRMelUF7 z1OWqP6hja&U`sIs0RsjVLlF4uqlNGnKE}wbIAVmYh5%JW>SyIDk;LQ83@+hJ5hpZ= z1QQWWj9?ou;Rx_sS%A&biVGOg! zGSF3Lp*=*VJ;_cSM&>%E`)CHP=!+QnRGWQNKhg9_`;t-#2yS0etb*Y7CB@9-H*@1a zj5m`QC|0HhI6{*QGf}Gvq_dSdN)sha9L>aJ#M>eaZu!g3v^^bl4Td^$%?*k&esv4j zxjGcRbNmQ5AgZ$5c;Q#M!7!6j?*#C*aHJazGbw(!!W;q>p8Pp;dlJ`eoG=>YRM99W zi6`ICB`SFYK{g=*iXjLX=sd*`gvW!AK7!UFK@0Qi*c@WT`85f(bEqZ1FoePxB!v+5 zOrWQAO2L+&HV$WNt+wTcZ*Wd&``Od%h-ciK($(>FH8`h|4TD^O4<;dQgL7vTGK78S zgtiC-`<@ivCqI%q1_Uw$gU8A=0_Su=K3SP#HGvUeWw3B?hH%U*x(HWvNi5rCdo^;H z9AS%vIpQ=>)!^ia(>OE9m4)M!oQnFCTxG&y-RInuo<2ujs~!~uU5w$O7=nO-q*Dw* zz`&SM3_;MI09}CgAg_=ETabo+HR#UFJqlkU6ii-$>$WBcOf#7Tz8youKmM2z6SkiS z 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 E0nERrWB>pF diff --git a/ImplementationExtensions/FlowerShopListImplement.dll b/ImplementationExtensions/FlowerShopListImplement.dll deleted file mode 100644 index 1052300040b327e62aa305288d0937003ace1b63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26112 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 aU;OD)|DO?6^0y`b#eMyM^Z(an;C}&N9N!@T -- 2.25.1