diff --git a/Components/Components.sln b/Components/Components.sln
index b4ba791..c2f1c08 100644
--- a/Components/Components.sln
+++ b/Components/Components.sln
@@ -7,13 +7,17 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Components", "Components\Co
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WinForms", "WinForms\WinForms.csproj", "{A961BB11-3AD9-4687-B338-FCDD7887E758}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataModels", "DataModels\DataModels.csproj", "{E47EA28F-3148-4A37-BACE-35F70E297E9F}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataModels", "DataModels\DataModels.csproj", "{E47EA28F-3148-4A37-BACE-35F70E297E9F}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Contracts", "Contracts\Contracts.csproj", "{4BA581C3-3921-4086-A41F-C507ADD258B9}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Contracts", "Contracts\Contracts.csproj", "{4BA581C3-3921-4086-A41F-C507ADD258B9}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DatabaseImplement", "DatabaseImplement\DatabaseImplement.csproj", "{4007A4AB-770E-4E72-8337-BC342A8C09BD}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DatabaseImplement", "DatabaseImplement\DatabaseImplement.csproj", "{4007A4AB-770E-4E72-8337-BC342A8C09BD}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BusinessLogics", "BusinessLogics\BusinessLogics.csproj", "{324D5883-FDDE-46D1-ADF0-31D46EF95AFF}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BusinessLogics", "BusinessLogics\BusinessLogics.csproj", "{324D5883-FDDE-46D1-ADF0-31D46EF95AFF}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Plugins", "Plugins\Plugins.csproj", "{C8AE2AD4-952F-4D20-B15B-F329B30CE0FC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinFormsPlugins", "WinFormsPlugins\WinFormsPlugins.csproj", "{10BD4FBA-80C9-4B31-BE68-5A2F128F5289}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -45,6 +49,14 @@ Global
{324D5883-FDDE-46D1-ADF0-31D46EF95AFF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{324D5883-FDDE-46D1-ADF0-31D46EF95AFF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{324D5883-FDDE-46D1-ADF0-31D46EF95AFF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C8AE2AD4-952F-4D20-B15B-F329B30CE0FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C8AE2AD4-952F-4D20-B15B-F329B30CE0FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C8AE2AD4-952F-4D20-B15B-F329B30CE0FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C8AE2AD4-952F-4D20-B15B-F329B30CE0FC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {10BD4FBA-80C9-4B31-BE68-5A2F128F5289}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {10BD4FBA-80C9-4B31-BE68-5A2F128F5289}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {10BD4FBA-80C9-4B31-BE68-5A2F128F5289}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {10BD4FBA-80C9-4B31-BE68-5A2F128F5289}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/Components/Plugins/IPluginsConvention.cs b/Components/Plugins/IPluginsConvention.cs
new file mode 100644
index 0000000..25f638a
--- /dev/null
+++ b/Components/Plugins/IPluginsConvention.cs
@@ -0,0 +1,75 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Plugins
+{
+ ///
+ /// Интерфейс-соглашение для плагинов
+ ///
+ public interface IPluginsConvention
+ {
+ ///
+ /// Название плагина
+ ///
+ string PluginName { get; }
+
+ ///
+ /// Получение контрола для вывода набора данных
+ ///
+ UserControl GetControl { get; }
+
+ ///
+ /// Получение элемента, выбранного в контроле
+ ///
+ PluginsConventionElement GetElement { get; }
+
+ ///
+ /// Получение формы для создания/редактирования объекта
+ ///
+ ///
+ ///
+ Form GetForm(PluginsConventionElement element);
+
+ ///
+ /// Получение формы для работы со справочником
+ ///
+ ///
+ Form GetThesaurus();
+
+ ///
+ /// Удаление элемента
+ ///
+ ///
+ ///
+ bool DeleteElement(PluginsConventionElement element);
+
+ ///
+ /// Обновление набора данных в контроле
+ ///
+ void ReloadData();
+
+ ///
+ /// Создание простого документа
+ ///
+ ///
+ ///
+ bool CreateSimpleDocument(PluginsConventionSaveDocument saveDocument);
+
+ ///
+ /// Создание документа с настраиваемой таблицей
+ ///
+ ///
+ ///
+ bool CreateTableDocument(PluginsConventionSaveDocument saveDocument);
+
+ ///
+ /// Создание документа с диаграммой
+ ///
+ ///
+ ///
+ bool CreateChartDocument(PluginsConventionSaveDocument saveDocument);
+ }
+}
diff --git a/Components/Plugins/Plugins.csproj b/Components/Plugins/Plugins.csproj
new file mode 100644
index 0000000..060aa1c
--- /dev/null
+++ b/Components/Plugins/Plugins.csproj
@@ -0,0 +1,10 @@
+
+
+
+ net6.0-windows
+ enable
+ true
+ enable
+
+
+
diff --git a/Components/Plugins/PluginsConventionElement.cs b/Components/Plugins/PluginsConventionElement.cs
new file mode 100644
index 0000000..51f0916
--- /dev/null
+++ b/Components/Plugins/PluginsConventionElement.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Plugins
+{
+ ///
+ /// Класс для передачи объекта на форму и удаления
+ ///
+ public class PluginsConventionElement
+ {
+ ///
+ /// Глобальный уникальный идентификатор
+ ///
+ public Guid Id { get; set; }
+ }
+}
diff --git a/Components/Plugins/PluginsConventionSaveDocument.cs b/Components/Plugins/PluginsConventionSaveDocument.cs
new file mode 100644
index 0000000..e9c00e7
--- /dev/null
+++ b/Components/Plugins/PluginsConventionSaveDocument.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Plugins
+{
+ ///
+ /// Класс для передачи данных в методы создания документов
+ ///
+ public class PluginsConventionSaveDocument
+ {
+ ///
+ /// Путь к файлу
+ ///
+ public string FileName { get; set; } = string.Empty;
+ }
+}
diff --git a/Components/WinForms/PluginsConvention.cs b/Components/WinForms/PluginsConvention.cs
new file mode 100644
index 0000000..14d9475
--- /dev/null
+++ b/Components/WinForms/PluginsConvention.cs
@@ -0,0 +1,335 @@
+using BusinessLogics.BusinessLogics;
+using Components.NonVisualComponents;
+using ComponentsLibrary.NonVisualComponents.HelperModels;
+using ComponentsLibrary.NonVisualComponents;
+using ComponentsLibrary.VisualComponents;
+using ComponentsLibraryNet60.DocumentWithTable;
+using ComponentsLibraryNet60.Models;
+using Contracts.BindingModels;
+using Contracts.BusinessLogicsContracts;
+using Contracts.ViewModels;
+using DatabaseImplement.Implements;
+using Microsoft.Extensions.Logging;
+using Plugins;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using NLog.Extensions.Logging;
+
+namespace WinForms
+{
+ ///
+ /// Реализация интерфейса-соглашения для плагинов
+ ///
+ public class PluginsConvention : IPluginsConvention
+ {
+ ///
+ /// Название плагина
+ ///
+ public string PluginName => "Orders";
+
+ ///
+ /// Визуальный компонент для вывода списка в виде дерева
+ ///
+ private readonly UserTreeView _userTreeView;
+
+ ///
+ /// Бизнес-логика для сущности "Счет"
+ ///
+ private readonly IOrderLogic _orderLogic;
+
+ ///
+ /// Бизнес-логика для сущности "Тип заказа"
+ ///
+ private readonly IOrderTypeLogic _orderTypeLogic;
+
+ ///
+ /// Конструктор
+ ///
+ public PluginsConvention()
+ {
+ _userTreeView = new UserTreeView();
+ var hierarchy = new List()
+ {
+ "Type",
+ "Sum",
+ "Id",
+ "WaiterFullName"
+ };
+ _userTreeView.SetHierarchy(hierarchy);
+
+ var loggerFactory = LoggerFactory.Create(builder => builder.AddNLog());
+ var orderLogicLogger = loggerFactory.CreateLogger();
+ var orderTypeLogicLogger = loggerFactory.CreateLogger();
+
+ _orderLogic = new OrderLogic(orderLogicLogger, new OrderStorage());
+ _orderTypeLogic = new OrderTypeLogic(orderTypeLogicLogger, new OrderTypeStorage());
+ }
+
+ ///
+ /// Получение контрола для вывода набора данных
+ ///
+ public UserControl GetControl
+ {
+ get
+ {
+ ReloadData();
+ return _userTreeView;
+ }
+ }
+
+ ///
+ /// Получение элемента, выбранного в контроле
+ ///
+ public PluginsConventionElement GetElement
+ {
+ get
+ {
+ var order = _userTreeView.GetSelectedObject();
+ int id = -1;
+ if (order != null)
+ {
+ id = order.Id;
+ }
+
+ byte[] bytes = new byte[16];
+ BitConverter.GetBytes(id).CopyTo(bytes, 0);
+ return new PluginsConventionElement { Id = new Guid(bytes) };
+ }
+ }
+
+ ///
+ /// Получение формы для создания/редактирования объекта
+ ///
+ ///
+ ///
+ public Form GetForm(PluginsConventionElement element)
+ {
+ if (element == null)
+ {
+ return new FormOrder(_orderLogic, _orderTypeLogic);
+ }
+
+ if (element.Id.GetHashCode() >= 0)
+ {
+ byte[] bytes = element.Id.ToByteArray();
+ int Id = BitConverter.ToInt32(bytes, 0);
+
+ var form = new FormOrder(_orderLogic, _orderTypeLogic);
+ form.Id = Id;
+ return form;
+ }
+
+ return null;
+ }
+
+ ///
+ /// Получение формы для работы со справочником
+ ///
+ ///
+ public Form GetThesaurus()
+ {
+ return new FormOrderTypes(_orderTypeLogic);
+ }
+
+ ///
+ /// Удаление элемента
+ ///
+ ///
+ ///
+ public bool DeleteElement(PluginsConventionElement element)
+ {
+ if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
+ {
+ return false;
+ }
+
+ byte[] bytes = element.Id.ToByteArray();
+ int Id = BitConverter.ToInt32(bytes, 0);
+
+ try
+ {
+ _orderLogic.Delete(new OrderBindingModel() { Id = Id });
+ ReloadData();
+ return true;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+ }
+
+ ///
+ /// Обновление набора данных в контроле
+ ///
+ public void ReloadData()
+ {
+ try
+ {
+ var orders = _orderLogic.ReadList(null);
+ if (orders == null)
+ {
+ return;
+ }
+
+ foreach (var order in orders)
+ {
+ if (string.IsNullOrEmpty(order.Sum))
+ {
+ order.Sum = "По акции";
+ }
+
+ _userTreeView.AddObjectToTree(order);
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+
+ ///
+ /// Создание простого документа
+ ///
+ ///
+ ///
+ public bool CreateSimpleDocument(PluginsConventionSaveDocument saveDocument)
+ {
+ try
+ {
+ var orders = _orderLogic.ReadList(null);
+ if (orders == null)
+ {
+ return false;
+ }
+
+ string title = "Информация по аукционным счетам.";
+
+ List rows = new List();
+ foreach (var order in orders)
+ {
+ if (string.IsNullOrEmpty(order.Sum))
+ {
+ string row = $"ФИО официанта: {order.WaiterFullName} -- Описание счета: {order.Info}";
+ rows.Add(row);
+ }
+ }
+ string[] rowsArray = rows.ToArray();
+
+ var bigTextComponent = new BigTextComponent();
+ bigTextComponent.CreateDocument(saveDocument.FileName, title, rowsArray);
+
+ return true;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+ }
+
+ ///
+ /// Создание документа с настраиваемой таблицей
+ ///
+ ///
+ ///
+ public bool CreateTableDocument(PluginsConventionSaveDocument saveDocument)
+ {
+ try
+ {
+ var orders = _orderLogic.ReadList(null);
+ if (orders == null)
+ {
+ return false;
+ }
+
+ foreach (var order in orders)
+ {
+ if (string.IsNullOrEmpty(order.Sum))
+ {
+ order.Sum = "По акции";
+ }
+ }
+
+ var componentDocumentWithTableMultiHeaderWord = new ComponentDocumentWithTableMultiHeaderWord();
+ componentDocumentWithTableMultiHeaderWord.CreateDoc(new ComponentDocumentWithTableHeaderDataConfig
+ {
+ FilePath = saveDocument.FileName,
+ Header = "Информация по счетам.",
+ ColumnsRowsWidth = new List<(int Column, int Row)>()
+ {
+ (5, 5),
+ (10, 5),
+ (15, 0),
+ (15, 0),
+ },
+ Headers = new List<(int ColumnIndex, int RowIndex, string Header, string PropertyName)>()
+ {
+ (0, 0, "Id", "Id"),
+ (1, 0, "ФИО официанта", "WaiterFullName"),
+ (2, 0, "Тип заказа", "Type"),
+ (3, 0, "Сумма заказа", "Sum")
+ },
+ Data = orders,
+ });
+
+ return true;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+ }
+
+ ///
+ /// Создание документа с диаграммой
+ ///
+ ///
+ ///
+ public bool CreateChartDocument(PluginsConventionSaveDocument saveDocument)
+ {
+ try
+ {
+ var orders = _orderLogic.ReadList(null);
+ if (orders == null)
+ {
+ return false;
+ }
+
+ var orderTypes = _orderTypeLogic.ReadList(null);
+ if (orderTypes == null)
+ {
+ return false;
+ }
+
+ List<(double, string)> items = new List<(double, string)>();
+ foreach (var orderType in orderTypes)
+ {
+ int count = 0;
+ foreach (var order in orders)
+ {
+ if (order.Type == orderType.Name && string.IsNullOrEmpty(order.Sum))
+ {
+ count++;
+ }
+ }
+ items.Add((count, orderType.Name));
+ }
+
+ var pdfPieChart = new PdfPieChart();
+ pdfPieChart.CreatePieChart(new DataForPieChart(saveDocument.FileName, "Информация по оплаченным счетам каждого типа заказов", "Круговая диаграмма", DiagramLegendEnum.Top, "Типы заказов", items));
+
+ return true;
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return false;
+ }
+ }
+ }
+}
diff --git a/Components/WinForms/Program.cs b/Components/WinForms/Program.cs
index e5134f2..e33e50c 100644
--- a/Components/WinForms/Program.cs
+++ b/Components/WinForms/Program.cs
@@ -5,6 +5,7 @@ using DatabaseImplement.Implements;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NLog.Extensions.Logging;
+using Plugins;
using System;
namespace WinForms
diff --git a/Components/WinForms/WinForms.csproj b/Components/WinForms/WinForms.csproj
index 84d8c55..27e0db1 100644
--- a/Components/WinForms/WinForms.csproj
+++ b/Components/WinForms/WinForms.csproj
@@ -35,6 +35,7 @@
+
diff --git a/Components/WinFormsPlugins/FormMain.Designer.cs b/Components/WinFormsPlugins/FormMain.Designer.cs
new file mode 100644
index 0000000..0bb4e1c
--- /dev/null
+++ b/Components/WinFormsPlugins/FormMain.Designer.cs
@@ -0,0 +1,184 @@
+namespace WinFormsPlugins
+{
+ partial class FormMain
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.menuStrip = new System.Windows.Forms.MenuStrip();
+ this.ControlsStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.ActionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.DocsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.SimpleDocToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.TableDocToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.ChartDocToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.panelControl = new System.Windows.Forms.Panel();
+ this.ThesaurusToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.AddElementToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.UpdElementToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.DelElementToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.menuStrip.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // menuStrip
+ //
+ this.menuStrip.Items.AddRange(new
+ System.Windows.Forms.ToolStripItem[] {
+ this.ControlsStripMenuItem,
+ this.ActionsToolStripMenuItem,
+ this.DocsToolStripMenuItem});
+ this.menuStrip.Location = new System.Drawing.Point(0, 0);
+ this.menuStrip.Name = "menuStrip";
+ this.menuStrip.Size = new System.Drawing.Size(800, 24);
+ this.menuStrip.TabIndex = 0;
+ this.menuStrip.Text = "Меню";
+ //
+ // ControlsStripMenuItem
+ //
+ this.ControlsStripMenuItem.Name = "ControlsStripMenuItem";
+ this.ControlsStripMenuItem.Size = new System.Drawing.Size(94, 20);
+ this.ControlsStripMenuItem.Text = "Компоненты";
+ //
+ // ActionsToolStripMenuItem
+ //
+ this.ActionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.ThesaurusToolStripMenuItem,
+ this.AddElementToolStripMenuItem,
+ this.UpdElementToolStripMenuItem,
+ this.DelElementToolStripMenuItem});
+ this.ActionsToolStripMenuItem.Name = "ActionsToolStripMenuItem";
+ this.ActionsToolStripMenuItem.Size = new System.Drawing.Size(70, 20);
+ this.ActionsToolStripMenuItem.Text = "Действия";
+ //
+ // DocsToolStripMenuItem
+ //
+ this.DocsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
+ this.SimpleDocToolStripMenuItem,
+ this.TableDocToolStripMenuItem,
+ this.ChartDocToolStripMenuItem});
+ this.DocsToolStripMenuItem.Name = "DocsToolStripMenuItem";
+ this.DocsToolStripMenuItem.Size = new System.Drawing.Size(82, 20);
+ this.DocsToolStripMenuItem.Text = "Документы";
+ //
+ // SimpleDocToolStripMenuItem
+ //
+ this.SimpleDocToolStripMenuItem.Name = "SimpleDocToolStripMenuItem";
+ this.SimpleDocToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
+ this.SimpleDocToolStripMenuItem.Size = new System.Drawing.Size(233, 22);
+ this.SimpleDocToolStripMenuItem.Text = "Простой документ";
+ this.SimpleDocToolStripMenuItem.Click += new System.EventHandler(this.SimpleDocToolStripMenuItem_Click);
+ //
+ // TableDocToolStripMenuItem
+ //
+ this.TableDocToolStripMenuItem.Name = "TableDocToolStripMenuItem";
+ this.TableDocToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.T)));
+ this.TableDocToolStripMenuItem.Size = new System.Drawing.Size(233, 22);
+ this.TableDocToolStripMenuItem.Text = "Документ с таблицей";
+ this.TableDocToolStripMenuItem.Click += new System.EventHandler(this.TableDocToolStripMenuItem_Click);
+ //
+ // ChartDocToolStripMenuItem
+ //
+ this.ChartDocToolStripMenuItem.Name = "ChartDocToolStripMenuItem";
+ this.ChartDocToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.C)));
+ this.ChartDocToolStripMenuItem.Size = new System.Drawing.Size(233, 22);
+ this.ChartDocToolStripMenuItem.Text = "Диаграмма";
+ this.ChartDocToolStripMenuItem.Click += new System.EventHandler(this.ChartDocToolStripMenuItem_Click);
+ //
+ // panelControl
+ //
+ this.panelControl.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.panelControl.Location = new System.Drawing.Point(0, 24);
+ this.panelControl.Name = "panelControl";
+ this.panelControl.Size = new System.Drawing.Size(800, 426);
+ this.panelControl.TabIndex = 1;
+ //
+ // ThesaurusToolStripMenuItem
+ //
+ this.ThesaurusToolStripMenuItem.Name = "ThesaurusToolStripMenuItem";
+ this.ThesaurusToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.I)));
+ this.ThesaurusToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.ThesaurusToolStripMenuItem.Text = "Справочник";
+ this.ThesaurusToolStripMenuItem.Click += new System.EventHandler(this.ThesaurusToolStripMenuItem_Click);
+ //
+ // AddElementToolStripMenuItem
+ //
+ this.AddElementToolStripMenuItem.Name = "AddElementToolStripMenuItem";
+ this.AddElementToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.A)));
+ this.AddElementToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.AddElementToolStripMenuItem.Text = "Добавить";
+ this.AddElementToolStripMenuItem.Click += new System.EventHandler(this.AddElementToolStripMenuItem_Click);
+ //
+ // UpdElementToolStripMenuItem
+ //
+ this.UpdElementToolStripMenuItem.Name = "UpdElementToolStripMenuItem";
+ this.UpdElementToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.U)));
+ this.UpdElementToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.UpdElementToolStripMenuItem.Text = "Изменить";
+ this.UpdElementToolStripMenuItem.Click += new System.EventHandler(this.UpdElementToolStripMenuItem_Click);
+ //
+ // DelElementToolStripMenuItem
+ //
+ this.DelElementToolStripMenuItem.Name = "DelElementToolStripMenuItem";
+ this.DelElementToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D)));
+ this.DelElementToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+ this.DelElementToolStripMenuItem.Text = "Удалить";
+ this.DelElementToolStripMenuItem.Click += new System.EventHandler(this.DelElementToolStripMenuItem_Click);
+ //
+ // FormMain
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(800, 450);
+ this.Controls.Add(this.panelControl);
+ this.Controls.Add(this.menuStrip);
+ this.MainMenuStrip = this.menuStrip;
+ this.Name = "FormMain";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
+ this.Text = "Главная форма";
+ this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
+ this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.FormMain_KeyDown);
+ this.menuStrip.ResumeLayout(false);
+ this.menuStrip.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
+ }
+
+ #endregion
+
+ private System.Windows.Forms.MenuStrip menuStrip;
+ private System.Windows.Forms.ToolStripMenuItem ControlsStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem DocsToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem SimpleDocToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem TableDocToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem ChartDocToolStripMenuItem;
+ private System.Windows.Forms.Panel panelControl;
+ private System.Windows.Forms.ToolStripMenuItem ActionsToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem ThesaurusToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem AddElementToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem UpdElementToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem DelElementToolStripMenuItem;
+ }
+}
diff --git a/Components/WinFormsPlugins/FormMain.cs b/Components/WinFormsPlugins/FormMain.cs
new file mode 100644
index 0000000..a050d18
--- /dev/null
+++ b/Components/WinFormsPlugins/FormMain.cs
@@ -0,0 +1,309 @@
+using DocumentFormat.OpenXml.Office2010.CustomUI;
+using Plugins;
+using System.Reflection;
+
+namespace WinFormsPlugins
+{
+ ///
+ ///
+ ///
+ public partial class FormMain : Form
+ {
+ ///
+ ///
+ ///
+ private readonly Dictionary _plugins;
+
+ ///
+ ///
+ ///
+ private string _selectedPlugin;
+
+ ///
+ ///
+ ///
+ public FormMain()
+ {
+ InitializeComponent();
+
+ _plugins = LoadPlugins();
+ _selectedPlugin = string.Empty;
+ }
+
+ ///
+ ///
+ ///
+ ///
+ private Dictionary LoadPlugins()
+ {
+ var plugins = new Dictionary();
+ string pluginsDir = Directory.GetParent(Directory.GetCurrentDirectory())!
+ .Parent!.Parent!.FullName + "\\plugins";
+ string[] dllFiles = Directory.GetFiles(pluginsDir, "*.dll", SearchOption.AllDirectories);
+
+ foreach (string dllFile in dllFiles)
+ {
+ try
+ {
+ Assembly assembly = Assembly.LoadFrom(dllFile);
+ Type[] types = assembly.GetTypes();
+
+ foreach (var type in types)
+ {
+ if (typeof(IPluginsConvention).IsAssignableFrom(type) && !type.IsInterface)
+ {
+ var plugin = (IPluginsConvention)Activator.CreateInstance(type)!;
+ plugins.Add(plugin.PluginName, plugin);
+ CreateToolStripMenuItem(plugin.PluginName);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ // , , , , Exceptions,
+ // Unable to load one or more of the requested types
+ Console.WriteLine($" {dllFile}: {ex.Message}");
+ }
+ }
+
+ return plugins;
+ }
+
+ ///
+ /// ToolStripMenuItem
+ ///
+ ///
+ private void CreateToolStripMenuItem(string pluginName)
+ {
+ var menuItem = new ToolStripMenuItem(pluginName);
+ menuItem.Click += (object? sender, EventArgs e) =>
+ {
+ _selectedPlugin = pluginName;
+ IPluginsConvention plugin = _plugins![pluginName];
+ UserControl userControl = plugin.GetControl;
+ if (userControl != null)
+ {
+ panelControl.Controls.Clear();
+ plugin.ReloadData();
+ userControl.Dock = DockStyle.Fill;
+ panelControl.Controls.Add(userControl);
+ }
+ };
+ ControlsStripMenuItem.DropDownItems.Add(menuItem);
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void FormMain_KeyDown(object sender, KeyEventArgs e)
+ {
+ if (string.IsNullOrEmpty(_selectedPlugin) || !_plugins.ContainsKey(_selectedPlugin))
+ {
+ return;
+ }
+ if (!e.Control)
+ {
+ return;
+ }
+
+ switch (e.KeyCode)
+ {
+ case Keys.I:
+ ShowThesaurus();
+ break;
+ case Keys.A:
+ AddNewElement();
+ break;
+ case Keys.U:
+ UpdateElement();
+ break;
+ case Keys.D:
+ DeleteElement();
+ break;
+ case Keys.S:
+ CreateSimpleDoc();
+ break;
+ case Keys.T:
+ CreateTableDoc();
+ break;
+ case Keys.C:
+ CreateChartDoc();
+ break;
+ }
+ }
+
+ ///
+ ///
+ ///
+ private void ShowThesaurus()
+ {
+ _plugins[_selectedPlugin].GetThesaurus()?.Show();
+ }
+
+ ///
+ ///
+ ///
+ private void AddNewElement()
+ {
+ var form = _plugins[_selectedPlugin].GetForm(null);
+ if (form != null && form.ShowDialog() == DialogResult.OK)
+ {
+ _plugins[_selectedPlugin].ReloadData();
+ }
+ }
+
+ ///
+ ///
+ ///
+ private void UpdateElement()
+ {
+ var element = _plugins[_selectedPlugin].GetElement;
+ if (element == null)
+ {
+ MessageBox.Show(" !", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ var form = _plugins[_selectedPlugin].GetForm(element);
+ if (form != null && form.ShowDialog() == DialogResult.OK)
+ {
+ _plugins[_selectedPlugin].ReloadData();
+ }
+ }
+
+ ///
+ ///
+ ///
+ private void DeleteElement()
+ {
+ var element = _plugins[_selectedPlugin].GetElement;
+ if (element == null)
+ {
+ MessageBox.Show(" !", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+
+ if (_plugins[_selectedPlugin].DeleteElement(element))
+ {
+ _plugins[_selectedPlugin].ReloadData();
+ }
+ }
+
+ ///
+ ///
+ ///
+ private void CreateSimpleDoc()
+ {
+ using (var dialog = new SaveFileDialog { Filter = "xlsx|*.xlsx" })
+ {
+ if (dialog.ShowDialog() == DialogResult.OK)
+ {
+ string fileName = dialog.FileName.ToString();
+ if (_plugins[_selectedPlugin].CreateSimpleDocument(new PluginsConventionSaveDocument() { FileName = fileName }))
+ {
+ MessageBox.Show(" ", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ else
+ {
+ MessageBox.Show(" ", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+ }
+
+ ///
+ ///
+ ///
+ private void CreateTableDoc()
+ {
+ using (var dialog = new SaveFileDialog { Filter = "docx|*.docx" })
+ {
+ if (dialog.ShowDialog() == DialogResult.OK)
+ {
+ string fileName = dialog.FileName.ToString();
+ if (_plugins[_selectedPlugin].CreateTableDocument(new PluginsConventionSaveDocument() { FileName = fileName }))
+ {
+ MessageBox.Show(" ", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ else
+ {
+ MessageBox.Show(" ", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+ }
+
+ ///
+ ///
+ ///
+ private void CreateChartDoc()
+ {
+ using (var dialog = new SaveFileDialog { Filter = "pdf|*.pdf" })
+ {
+ if (dialog.ShowDialog() == DialogResult.OK)
+ {
+ string fileName = dialog.FileName.ToString();
+ if (_plugins[_selectedPlugin].CreateChartDocument(new PluginsConventionSaveDocument() { FileName = fileName }))
+ {
+ MessageBox.Show(" ", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ else
+ {
+ MessageBox.Show(" ", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ }
+ }
+ }
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void ThesaurusToolStripMenuItem_Click(object sender, EventArgs e) => ShowThesaurus();
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void AddElementToolStripMenuItem_Click(object sender, EventArgs e) => AddNewElement();
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void UpdElementToolStripMenuItem_Click(object sender, EventArgs e) => UpdateElement();
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void DelElementToolStripMenuItem_Click(object sender, EventArgs e) => DeleteElement();
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void SimpleDocToolStripMenuItem_Click(object sender, EventArgs e) => CreateSimpleDoc();
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void TableDocToolStripMenuItem_Click(object sender, EventArgs e) => CreateTableDoc();
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ private void ChartDocToolStripMenuItem_Click(object sender, EventArgs e) => CreateChartDoc();
+ }
+}
diff --git a/Components/WinFormsPlugins/FormMain.resx b/Components/WinFormsPlugins/FormMain.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/Components/WinFormsPlugins/FormMain.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Components/WinFormsPlugins/Program.cs b/Components/WinFormsPlugins/Program.cs
new file mode 100644
index 0000000..d3428bc
--- /dev/null
+++ b/Components/WinFormsPlugins/Program.cs
@@ -0,0 +1,61 @@
+using BusinessLogics.BusinessLogics;
+using Contracts.BusinessLogicsContracts;
+using Contracts.StoragesContracts;
+using DatabaseImplement.Implements;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using NLog.Extensions.Logging;
+
+namespace WinFormsPlugins
+{
+ internal static class Program
+ {
+ ///
+ /// IoC-
+ ///
+ private static ServiceProvider? _serviceProvider;
+
+ ///
+ /// IoC-
+ ///
+ public static ServiceProvider? ServiceProvider => _serviceProvider;
+
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ // To customize application configuration such as set high DPI settings or default font,
+ // see https://aka.ms/applicationconfiguration.
+ ApplicationConfiguration.Initialize();
+
+ var services = new ServiceCollection();
+ ConfigureServices(services);
+ _serviceProvider = services.BuildServiceProvider();
+
+ Application.Run(new FormMain());
+ }
+
+ ///
+ ///
+ ///
+ ///
+ private static void ConfigureServices(ServiceCollection services)
+ {
+ //
+ services.AddLogging(option =>
+ {
+ option.SetMinimumLevel(LogLevel.Information);
+ option.AddNLog("nlog.config");
+ });
+
+ // IoC-, -
+ services.AddTransient();
+ services.AddTransient();
+
+ // IoC-,
+ services.AddTransient();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Components/WinFormsPlugins/WinFormsPlugins.csproj b/Components/WinFormsPlugins/WinFormsPlugins.csproj
new file mode 100644
index 0000000..96ff438
--- /dev/null
+++ b/Components/WinFormsPlugins/WinFormsPlugins.csproj
@@ -0,0 +1,22 @@
+
+
+
+ WinExe
+ net6.0-windows
+ enable
+ true
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Components/WinFormsPlugins/plugins/BusinessLogics.dll b/Components/WinFormsPlugins/plugins/BusinessLogics.dll
new file mode 100644
index 0000000..e657ee2
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/BusinessLogics.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Components.dll b/Components/WinFormsPlugins/plugins/Components.dll
new file mode 100644
index 0000000..8b024a4
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Components.dll differ
diff --git a/Components/WinFormsPlugins/plugins/ComponentsLibrary.dll b/Components/WinFormsPlugins/plugins/ComponentsLibrary.dll
new file mode 100644
index 0000000..0e1f9c7
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/ComponentsLibrary.dll differ
diff --git a/Components/WinFormsPlugins/plugins/ComponentsLibraryNet60.dll b/Components/WinFormsPlugins/plugins/ComponentsLibraryNet60.dll
new file mode 100644
index 0000000..9807306
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/ComponentsLibraryNet60.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Contracts.dll b/Components/WinFormsPlugins/plugins/Contracts.dll
new file mode 100644
index 0000000..a2d3d98
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Contracts.dll differ
diff --git a/Components/WinFormsPlugins/plugins/ControlsLibraryNet60.dll b/Components/WinFormsPlugins/plugins/ControlsLibraryNet60.dll
new file mode 100644
index 0000000..3d14013
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/ControlsLibraryNet60.dll differ
diff --git a/Components/WinFormsPlugins/plugins/DataModels.dll b/Components/WinFormsPlugins/plugins/DataModels.dll
new file mode 100644
index 0000000..9f2852d
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/DataModels.dll differ
diff --git a/Components/WinFormsPlugins/plugins/DatabaseImplement.dll b/Components/WinFormsPlugins/plugins/DatabaseImplement.dll
new file mode 100644
index 0000000..8006218
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/DatabaseImplement.dll differ
diff --git a/Components/WinFormsPlugins/plugins/DocumentFormat.OpenXml.dll b/Components/WinFormsPlugins/plugins/DocumentFormat.OpenXml.dll
new file mode 100644
index 0000000..846973a
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/DocumentFormat.OpenXml.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Humanizer.dll b/Components/WinFormsPlugins/plugins/Humanizer.dll
new file mode 100644
index 0000000..c9a7ef8
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Humanizer.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.EntityFrameworkCore.Abstractions.dll b/Components/WinFormsPlugins/plugins/Microsoft.EntityFrameworkCore.Abstractions.dll
new file mode 100644
index 0000000..93f27f8
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.EntityFrameworkCore.Abstractions.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.EntityFrameworkCore.Design.dll b/Components/WinFormsPlugins/plugins/Microsoft.EntityFrameworkCore.Design.dll
new file mode 100644
index 0000000..0f13dd2
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.EntityFrameworkCore.Design.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.EntityFrameworkCore.Relational.dll b/Components/WinFormsPlugins/plugins/Microsoft.EntityFrameworkCore.Relational.dll
new file mode 100644
index 0000000..c96960d
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.EntityFrameworkCore.Relational.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.EntityFrameworkCore.dll b/Components/WinFormsPlugins/plugins/Microsoft.EntityFrameworkCore.dll
new file mode 100644
index 0000000..cbb4006
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.EntityFrameworkCore.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Caching.Abstractions.dll b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Caching.Abstractions.dll
new file mode 100644
index 0000000..be73869
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Caching.Abstractions.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Caching.Memory.dll b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Caching.Memory.dll
new file mode 100644
index 0000000..561804a
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Caching.Memory.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Configuration.Abstractions.dll b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Configuration.Abstractions.dll
new file mode 100644
index 0000000..335bb77
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Configuration.Abstractions.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Configuration.dll b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Configuration.dll
new file mode 100644
index 0000000..67d4dff
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Configuration.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.Extensions.DependencyInjection.Abstractions.dll b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.DependencyInjection.Abstractions.dll
new file mode 100644
index 0000000..b6f0c27
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.DependencyInjection.Abstractions.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.Extensions.DependencyInjection.dll b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.DependencyInjection.dll
new file mode 100644
index 0000000..7c11ac0
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.DependencyInjection.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.Extensions.DependencyModel.dll b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.DependencyModel.dll
new file mode 100644
index 0000000..072af1f
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.DependencyModel.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Logging.Abstractions.dll b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Logging.Abstractions.dll
new file mode 100644
index 0000000..03edd8f
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Logging.Abstractions.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Logging.dll b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Logging.dll
new file mode 100644
index 0000000..c53f5d2
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Logging.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Options.dll b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Options.dll
new file mode 100644
index 0000000..3987d66
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Options.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Primitives.dll b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Primitives.dll
new file mode 100644
index 0000000..bdad45f
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.Extensions.Primitives.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.Office.Interop.Excel.dll b/Components/WinFormsPlugins/plugins/Microsoft.Office.Interop.Excel.dll
new file mode 100644
index 0000000..4ab081c
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.Office.Interop.Excel.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Microsoft.Vbe.Interop.dll b/Components/WinFormsPlugins/plugins/Microsoft.Vbe.Interop.dll
new file mode 100644
index 0000000..d8c4b64
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Microsoft.Vbe.Interop.dll differ
diff --git a/Components/WinFormsPlugins/plugins/MigraDoc.DocumentObjectModel.dll b/Components/WinFormsPlugins/plugins/MigraDoc.DocumentObjectModel.dll
new file mode 100644
index 0000000..4334467
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/MigraDoc.DocumentObjectModel.dll differ
diff --git a/Components/WinFormsPlugins/plugins/MigraDoc.Rendering.dll b/Components/WinFormsPlugins/plugins/MigraDoc.Rendering.dll
new file mode 100644
index 0000000..def985f
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/MigraDoc.Rendering.dll differ
diff --git a/Components/WinFormsPlugins/plugins/MigraDoc.RtfRendering.dll b/Components/WinFormsPlugins/plugins/MigraDoc.RtfRendering.dll
new file mode 100644
index 0000000..21748d4
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/MigraDoc.RtfRendering.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Mono.TextTemplating.dll b/Components/WinFormsPlugins/plugins/Mono.TextTemplating.dll
new file mode 100644
index 0000000..d5a4b3c
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Mono.TextTemplating.dll differ
diff --git a/Components/WinFormsPlugins/plugins/NLog.Extensions.Logging.dll b/Components/WinFormsPlugins/plugins/NLog.Extensions.Logging.dll
new file mode 100644
index 0000000..5d68b5d
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/NLog.Extensions.Logging.dll differ
diff --git a/Components/WinFormsPlugins/plugins/NLog.dll b/Components/WinFormsPlugins/plugins/NLog.dll
new file mode 100644
index 0000000..49604e1
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/NLog.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Npgsql.EntityFrameworkCore.PostgreSQL.dll b/Components/WinFormsPlugins/plugins/Npgsql.EntityFrameworkCore.PostgreSQL.dll
new file mode 100644
index 0000000..759014b
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Npgsql.EntityFrameworkCore.PostgreSQL.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Npgsql.dll b/Components/WinFormsPlugins/plugins/Npgsql.dll
new file mode 100644
index 0000000..72d6732
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Npgsql.dll differ
diff --git a/Components/WinFormsPlugins/plugins/Office.dll b/Components/WinFormsPlugins/plugins/Office.dll
new file mode 100644
index 0000000..447c580
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/Office.dll differ
diff --git a/Components/WinFormsPlugins/plugins/PdfSharp.Charting.dll b/Components/WinFormsPlugins/plugins/PdfSharp.Charting.dll
new file mode 100644
index 0000000..5c61b17
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/PdfSharp.Charting.dll differ
diff --git a/Components/WinFormsPlugins/plugins/PdfSharp.Quality.dll b/Components/WinFormsPlugins/plugins/PdfSharp.Quality.dll
new file mode 100644
index 0000000..72e514c
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/PdfSharp.Quality.dll differ
diff --git a/Components/WinFormsPlugins/plugins/PdfSharp.Snippets.dll b/Components/WinFormsPlugins/plugins/PdfSharp.Snippets.dll
new file mode 100644
index 0000000..266cdad
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/PdfSharp.Snippets.dll differ
diff --git a/Components/WinFormsPlugins/plugins/PdfSharp.System.dll b/Components/WinFormsPlugins/plugins/PdfSharp.System.dll
new file mode 100644
index 0000000..e8dded5
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/PdfSharp.System.dll differ
diff --git a/Components/WinFormsPlugins/plugins/PdfSharp.WPFonts.dll b/Components/WinFormsPlugins/plugins/PdfSharp.WPFonts.dll
new file mode 100644
index 0000000..9a7c2ca
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/PdfSharp.WPFonts.dll differ
diff --git a/Components/WinFormsPlugins/plugins/PdfSharp.dll b/Components/WinFormsPlugins/plugins/PdfSharp.dll
new file mode 100644
index 0000000..61b8fde
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/PdfSharp.dll differ
diff --git a/Components/WinFormsPlugins/plugins/System.Text.Encodings.Web.dll b/Components/WinFormsPlugins/plugins/System.Text.Encodings.Web.dll
new file mode 100644
index 0000000..13a219a
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/System.Text.Encodings.Web.dll differ
diff --git a/Components/WinFormsPlugins/plugins/System.Text.Json.dll b/Components/WinFormsPlugins/plugins/System.Text.Json.dll
new file mode 100644
index 0000000..2078226
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/System.Text.Json.dll differ
diff --git a/Components/WinFormsPlugins/plugins/WinForms.dll b/Components/WinFormsPlugins/plugins/WinForms.dll
new file mode 100644
index 0000000..3fe743d
Binary files /dev/null and b/Components/WinFormsPlugins/plugins/WinForms.dll differ