From 2f9a01c0a66d96de102db97ba24c122962cda5a0 Mon Sep 17 00:00:00 2001 From: Viltskaa Date: Fri, 5 May 2023 10:36:33 +0400 Subject: [PATCH] Passed lab8 --- SushiBar/SushiBar/Program.cs | 16 -------- .../BusinessLogicImplementationExtension.cs | 33 +++++++++++++++ .../SushiBarBusinessLogic.csproj | 4 ++ .../Attributes/ColumnAttribute.cs | 5 ++- .../Attributes/DataGridViewExtension.cs | 1 + .../SushiBarContracts/DI/DependencyManager.cs | 13 +++--- .../DI/ILogicImplementationExtension.cs | 3 ++ .../DI/ServiceProviderLoader.cs | 41 +++++++++++-------- .../ViewModels/OrderViewModel.cs | 6 +-- 9 files changed, 81 insertions(+), 41 deletions(-) create mode 100644 SushiBar/SushiBarBusinessLogic/BusinessLogicImplementationExtension.cs create mode 100644 SushiBar/SushiBarContracts/DI/ILogicImplementationExtension.cs diff --git a/SushiBar/SushiBar/Program.cs b/SushiBar/SushiBar/Program.cs index 142e6a8..84c8090 100644 --- a/SushiBar/SushiBar/Program.cs +++ b/SushiBar/SushiBar/Program.cs @@ -58,22 +58,6 @@ internal static class Program 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(); - - DependencyManager.Instance.RegisterType(true); - - DependencyManager.Instance.RegisterType(); - DependencyManager.Instance.RegisterType(); - DependencyManager.Instance.RegisterType(); DependencyManager.Instance.RegisterType(); DependencyManager.Instance.RegisterType(); diff --git a/SushiBar/SushiBarBusinessLogic/BusinessLogicImplementationExtension.cs b/SushiBar/SushiBarBusinessLogic/BusinessLogicImplementationExtension.cs new file mode 100644 index 0000000..761d0f6 --- /dev/null +++ b/SushiBar/SushiBarBusinessLogic/BusinessLogicImplementationExtension.cs @@ -0,0 +1,33 @@ +using SushiBarBusinessLogic.BusinessLogics; +using SushiBarBusinessLogic.MailWorker; +using SushiBarBusinessLogic.OfficePackage; +using SushiBarBusinessLogic.OfficePackage.Implements; +using SushiBarContracts.BusinessLogicsContracts; +using SushiBarContracts.DI; + +namespace SushiBarBusinessLogic; + +public class BusinessLogicImplementationExtension : ILogicImplementationExtension +{ + 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(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + DependencyManager.Instance.RegisterType(); + + DependencyManager.Instance.RegisterType(isSingle: true); + } +} \ No newline at end of file diff --git a/SushiBar/SushiBarBusinessLogic/SushiBarBusinessLogic.csproj b/SushiBar/SushiBarBusinessLogic/SushiBarBusinessLogic.csproj index 27ad21c..c542a18 100644 --- a/SushiBar/SushiBarBusinessLogic/SushiBarBusinessLogic.csproj +++ b/SushiBar/SushiBarBusinessLogic/SushiBarBusinessLogic.csproj @@ -17,4 +17,8 @@ + + + + diff --git a/SushiBar/SushiBarContracts/Attributes/ColumnAttribute.cs b/SushiBar/SushiBarContracts/Attributes/ColumnAttribute.cs index 1ca5a50..64a22a9 100644 --- a/SushiBar/SushiBarContracts/Attributes/ColumnAttribute.cs +++ b/SushiBar/SushiBarContracts/Attributes/ColumnAttribute.cs @@ -7,17 +7,20 @@ public class ColumnAttribute : Attribute bool visible = true, int width = 0, GridViewAutoSize gridViewAutoSize = GridViewAutoSize.None, - bool isUseAutoSize = false) + bool isUseAutoSize = false, + string format = "") { Title = title; Visible = visible; Width = width; GridViewAutoSize = gridViewAutoSize; IsUseAutoSize = isUseAutoSize; + Format = format; } 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; } + public string Format { get; private set; } } \ No newline at end of file diff --git a/SushiBar/SushiBarContracts/Attributes/DataGridViewExtension.cs b/SushiBar/SushiBarContracts/Attributes/DataGridViewExtension.cs index 5f14d80..9cbc465 100644 --- a/SushiBar/SushiBarContracts/Attributes/DataGridViewExtension.cs +++ b/SushiBar/SushiBarContracts/Attributes/DataGridViewExtension.cs @@ -27,6 +27,7 @@ public static class DataGridViewExtension throw new InvalidOperationException($"Not found attribute ColumnAttribute to property {property.Name}"); case ColumnAttribute columnAttr: { + column.DefaultCellStyle.Format = columnAttr.Format; column.HeaderText = columnAttr.Title; column.Visible = columnAttr.Visible; if (columnAttr.IsUseAutoSize) diff --git a/SushiBar/SushiBarContracts/DI/DependencyManager.cs b/SushiBar/SushiBarContracts/DI/DependencyManager.cs index 9c21ae0..2986a5b 100644 --- a/SushiBar/SushiBarContracts/DI/DependencyManager.cs +++ b/SushiBar/SushiBarContracts/DI/DependencyManager.cs @@ -10,7 +10,7 @@ public class DependencyManager private DependencyManager() { - _dependencyManager = new ServiceDependencyContainer(); + _dependencyManager = new UnityDependencyContainer(); } public static DependencyManager Instance { get { @@ -23,12 +23,15 @@ public class DependencyManager public static void InitDependency() { - var ext = ServiceProviderLoader.GetImplementationExtensions(); - if (ext == null) + var exts = ServiceProviderLoader.GetImplementationExtensions(); + foreach (var ext in exts) { - throw new ArgumentNullException("Missing components to load module dependencies"); + if (ext == null) + { + throw new ArgumentNullException("Missing components to load module dependencies"); + } + ext.RegisterServices(); } - ext.RegisterServices(); } public void AddLogging(Action configure) => diff --git a/SushiBar/SushiBarContracts/DI/ILogicImplementationExtension.cs b/SushiBar/SushiBarContracts/DI/ILogicImplementationExtension.cs new file mode 100644 index 0000000..22ec3b7 --- /dev/null +++ b/SushiBar/SushiBarContracts/DI/ILogicImplementationExtension.cs @@ -0,0 +1,3 @@ +namespace SushiBarContracts.DI; + +public interface ILogicImplementationExtension : IImplementationExtension { } \ No newline at end of file diff --git a/SushiBar/SushiBarContracts/DI/ServiceProviderLoader.cs b/SushiBar/SushiBarContracts/DI/ServiceProviderLoader.cs index 505a0d9..8e145cd 100644 --- a/SushiBar/SushiBarContracts/DI/ServiceProviderLoader.cs +++ b/SushiBar/SushiBarContracts/DI/ServiceProviderLoader.cs @@ -4,34 +4,43 @@ namespace SushiBarContracts.DI; public static partial class ServiceProviderLoader { - public static IImplementationExtension? GetImplementationExtensions() + public static List GetImplementationExtensions() { - IImplementationExtension? source = null; - var files = - Directory.GetFiles(TryGetImplementationExtensionsFolder(), "*.dll", - SearchOption.AllDirectories); + Type[] types = + { + typeof(ILogicImplementationExtension), + typeof(IImplementationExtension) + }; + var trueTypes = types.Select(x => (IImplementationExtension?)null).ToList(); + var files = Directory.GetFiles(TryGetImplementationExtensionsFolder(), "*.dll", SearchOption.AllDirectories); foreach (var file in files.Distinct()) { - var asm = Assembly.LoadFrom(file); + Assembly asm = Assembly.LoadFrom(file); foreach (var t in asm.GetExportedTypes()) { - if (!t.IsClass || !typeof(IImplementationExtension).IsAssignableFrom(t)) continue; - if (source == null) + for (var i = 0; i < types.Length; i++) { - source = (IImplementationExtension)Activator.CreateInstance(t)!; - } - else - { - var newSource = (IImplementationExtension)Activator.CreateInstance(t)!; - if (newSource.Priority > source.Priority) + if (t.IsClass && types[i].IsAssignableFrom(t)) { - source = newSource; + if (trueTypes[i] == null) + { + trueTypes[i] = (IImplementationExtension)Activator.CreateInstance(t)!; + } + else + { + var newSource = (IImplementationExtension)Activator.CreateInstance(t)!; + if (newSource.Priority > trueTypes[i].Priority) + { + trueTypes[i] = newSource; + } + } } } } } - return source; + return trueTypes; } + private static string TryGetImplementationExtensionsFolder() { var directory = new diff --git a/SushiBar/SushiBarContracts/ViewModels/OrderViewModel.cs b/SushiBar/SushiBarContracts/ViewModels/OrderViewModel.cs index 5e0dab3..f85ab53 100644 --- a/SushiBar/SushiBarContracts/ViewModels/OrderViewModel.cs +++ b/SushiBar/SushiBarContracts/ViewModels/OrderViewModel.cs @@ -28,16 +28,16 @@ namespace SushiBarContracts.ViewModels [Column("Count", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] public int Count { get; set; } - [Column("Sum", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] + [Column("Sum", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true, format: "0.00 $")] public double Sum { get; set; } [Column("Status", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)] public OrderStatus Status { get; set; } = OrderStatus.Unknown; - [Column("Date Create", width:100)] + [Column("Date Create", width:100, format: "Date: dd/MM/yyyy")] public DateTime DateCreate { get; set; } = DateTime.Now; - [Column("Date Implement", width:100)] + [Column("Date Implement", width:100, format: "dd/MM/yyyy")] public DateTime? DateImplement { get; set; } } }