From d86fd44c01424ba5bc2780a9301f5c9701ca55d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9F=D0=B0=D0=B2=D0=B5=D0=BB=20=D0=9F=D1=83=D1=82=D0=B8?=
 =?UTF-8?q?=D0=BB=D0=B8=D0=BD?= <iputilin201@gmail.com>
Date: Sun, 7 May 2023 17:52:26 +0400
Subject: [PATCH 1/4] Lab complete

---
 .gitignore                                    |   3 +
 .../DataGridViewExtension.cs                  |  51 +++++++++
 .../PrecastConcretePlant/FormClients.cs       |   8 +-
 .../PrecastConcretePlant/FormComponents.cs    |  34 ++----
 .../PrecastConcretePlant/FormMain.Designer.cs |  20 +++-
 .../PrecastConcretePlant/FormMain.cs          | 100 ++++++++----------
 .../PrecastConcretePlant/FormReinforced.cs    |  60 +++++------
 .../FormViewImplementers.cs                   |  29 ++---
 .../PrecastConcretePlant/FormViewMail.cs      |   9 +-
 .../FormViewReinforced.cs                     |  35 ++----
 .../PrecastConcretePlant/Program.cs           |  85 +++++++--------
 .../BusinessLogic/BackUpLogic.cs              |  99 +++++++++++++++++
 .../Attributes/ColumnAttribute.cs             |  25 +++++
 .../Attributes/GridViewAutoSize.cs            |  21 ++++
 .../BindingModels/BackUpSaveBinidngModel.cs   |  13 +++
 .../BindingModels/MessageInfoBindingModel.cs  |   2 +
 .../BusinessLogicsContracts/IBackUpLogic.cs   |  10 ++
 .../DI/DependencyManager.cs                   |  61 +++++++++++
 .../DI/IDependencyContainer.cs                |  40 +++++++
 .../DI/IImplementationExtension.cs            |  17 +++
 .../DI/ServiceDependencyContainer.cs          |  62 +++++++++++
 .../DI/ServiceProviderLoader.cs               |  55 ++++++++++
 .../DI/UnityDependencyContainer.cs            |  38 +++++++
 .../PrecastConcretePlantContracts.csproj      |   8 ++
 .../StoragesContract/IBackUpInfo.cs           |  14 +++
 .../ViewModels/ClientViewModel.cs             |  10 +-
 .../ViewModels/ComponentViewModel.cs          |   8 +-
 .../ViewModels/ImplementerViewModel.cs        |  12 ++-
 .../ViewModels/MessageInfoViewModel.cs        |  17 ++-
 .../ViewModels/OrderViewModel.cs              |  33 ++++--
 .../ViewModels/ReinforcedViewModel.cs         |  10 +-
 .../IMessageInfoModel.cs                      |   2 +-
 .../BackUpInfo.cs                             |  26 +++++
 .../Client.cs                                 |   6 ++
 .../Component.cs                              |   5 +
 .../DatabaseImplementationExtension.cs        |  23 ++++
 .../Implementer.cs                            |  12 ++-
 .../MessageInfo.cs                            |   6 +-
 .../Order.cs                                  |  11 +-
 ...ecastConcretePlantDatabaseImplement.csproj |   4 +
 .../Reinforced.cs                             |   7 +-
 .../BackUpInfo.cs                             |  33 ++++++
 .../Client.cs                                 |   9 +-
 .../Component.cs                              |   5 +
 .../FileImplementationExtension.cs            |  28 +++++
 .../Implementer.cs                            |  11 +-
 .../MessageInfo.cs                            |  13 ++-
 .../Order.cs                                  |  19 ++--
 .../PrecastConcretePlantFileImplement.csproj  |   4 +
 .../Reinforced.cs                             |   6 ++
 .../BackUpInfo.cs                             |  17 +++
 .../ListImplementationExtension.cs            |  23 ++++
 .../MessageInfo.cs                            |   2 +-
 .../PrecastConcretePlantListImplement.csproj  |   4 +
 54 files changed, 977 insertions(+), 288 deletions(-)
 create mode 100644 PrecastConcretePlant/PrecastConcretePlant/DataGridViewExtension.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/BackUpLogic.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/Attributes/ColumnAttribute.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/Attributes/GridViewAutoSize.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/BackUpSaveBinidngModel.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/BusinessLogicsContracts/IBackUpLogic.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/DI/DependencyManager.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/DI/IDependencyContainer.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/DI/IImplementationExtension.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/DI/ServiceDependencyContainer.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/DI/ServiceProviderLoader.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/DI/UnityDependencyContainer.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantContracts/StoragesContract/IBackUpInfo.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/BackUpInfo.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/DatabaseImplementationExtension.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantFileImplement/BackUpInfo.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantFileImplement/FileImplementationExtension.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantListImplement/BackUpInfo.cs
 create mode 100644 PrecastConcretePlant/PrecastConcretePlantListImplement/ListImplementationExtension.cs

diff --git a/.gitignore b/.gitignore
index ca1c7a3..52737dc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,6 +14,9 @@
 # User-specific files (MonoDevelop/Xamarin Studio)
 *.userprefs
 
+# dll файлы
+*.dll
+
 # Mono auto generated files
 mono_crash.*
 
diff --git a/PrecastConcretePlant/PrecastConcretePlant/DataGridViewExtension.cs b/PrecastConcretePlant/PrecastConcretePlant/DataGridViewExtension.cs
new file mode 100644
index 0000000..0f857b4
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlant/DataGridViewExtension.cs
@@ -0,0 +1,51 @@
+using PrecastConcretePlantContracts.Attributes;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PrecastConcretePlantView
+{
+    internal static class DataGridViewExtension
+    {
+        public static void FillAndConfigGrid<T>(this DataGridView grid, List<T>? 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/PrecastConcretePlant/PrecastConcretePlant/FormClients.cs b/PrecastConcretePlant/PrecastConcretePlant/FormClients.cs
index e9f291d..b03e342 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/FormClients.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormClients.cs
@@ -31,13 +31,7 @@ namespace PrecastConcretePlantView
         {
             try
             {
-                var list = _logic.ReadList(null);
-                if (list != null)
-                {
-                    dataGridView.DataSource = list;
-                    dataGridView.Columns["Id"].Visible = false;
-                    dataGridView.Columns["ClientFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
-                }
+                dataGridView.FillAndConfigGrid(_logic.ReadList(null));
                 _logger.LogInformation("Загрузка клиентов");
             }
             catch (Exception ex)
diff --git a/PrecastConcretePlant/PrecastConcretePlant/FormComponents.cs b/PrecastConcretePlant/PrecastConcretePlant/FormComponents.cs
index 747221f..2c06385 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/FormComponents.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormComponents.cs
@@ -2,6 +2,7 @@
 using PrecastConcretePlant;
 using PrecastConcretePlantContracts.BindingModels;
 using PrecastConcretePlantContracts.BusinessLogicsContracts;
+using PrecastConcretePlantContracts.DI;
 
 namespace PrecastConcretePlantView
 {
@@ -23,14 +24,7 @@ namespace PrecastConcretePlantView
         {
             try
             {
-                var list = _logic.ReadList(null);
-                if (list != null)
-                {
-                    dataGridView.DataSource = list;
-                    dataGridView.Columns["Id"].Visible = false;
-                    dataGridView.Columns["ComponentName"].AutoSizeMode =
-                    DataGridViewAutoSizeColumnMode.Fill;
-                }
+                dataGridView.FillAndConfigGrid(_logic.ReadList(null));
                 _logger.LogInformation("Загрузка компонентов");
             }
             catch (Exception ex)
@@ -42,32 +36,22 @@ namespace PrecastConcretePlantView
         }
         private void ButtonAdd_Click(object sender, EventArgs e)
         {
-            var service =
-            Program.ServiceProvider?.GetService(typeof(FormComponent));
-            if (service is FormComponent form)
+            var form = DependencyManager.Instance.Resolve<FormComponent>();
+            if (form.ShowDialog() == DialogResult.OK)
             {
-                if (form.ShowDialog() == DialogResult.OK)
-                {
-                    LoadData();
-                }
+                LoadData();
             }
         }
         private void ButtonUpd_Click(object sender, EventArgs e)
         {
             if (dataGridView.SelectedRows.Count == 1)
             {
-                var service =
-                Program.ServiceProvider?.GetService(typeof(FormComponent));
-                if (service is FormComponent form)
+                var form = DependencyManager.Instance.Resolve<FormComponent>();
+                form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
+                if (form.ShowDialog() == DialogResult.OK)
                 {
-                    form.Id =
-                    Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
-                    if (form.ShowDialog() == DialogResult.OK)
-                    {
-
-                    }
+                    LoadData();
                 }
-                LoadData();
             }
         }
         private void ButtonDel_Click(object sender, EventArgs e)
diff --git a/PrecastConcretePlant/PrecastConcretePlant/FormMain.Designer.cs b/PrecastConcretePlant/PrecastConcretePlant/FormMain.Designer.cs
index 4cff5b1..dedec0e 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/FormMain.Designer.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormMain.Designer.cs
@@ -44,6 +44,7 @@
             this.ordersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.запускРаботToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             this.письмаToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+            this.создатьБэкапToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
             ((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
             this.menuStrip1.SuspendLayout();
             this.SuspendLayout();
@@ -99,7 +100,8 @@
             this.справочникиToolStripMenuItem,
             this.reportsToolStripMenuItem,
             this.запускРаботToolStripMenuItem,
-            this.письмаToolStripMenuItem});
+            this.письмаToolStripMenuItem,
+            this.создатьБэкапToolStripMenuItem});
             this.menuStrip1.Location = new System.Drawing.Point(0, 0);
             this.menuStrip1.Name = "menuStrip1";
             this.menuStrip1.Size = new System.Drawing.Size(1304, 24);
@@ -120,28 +122,28 @@
             // reinforcedToolStripMenuItem
             // 
             this.reinforcedToolStripMenuItem.Name = "reinforcedToolStripMenuItem";
-            this.reinforcedToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+            this.reinforcedToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
             this.reinforcedToolStripMenuItem.Text = "Изделия";
             this.reinforcedToolStripMenuItem.Click += new System.EventHandler(this.ReinforcedToolStripMenuItem_Click);
             // 
             // componentToolStripMenuItem
             // 
             this.componentToolStripMenuItem.Name = "componentToolStripMenuItem";
-            this.componentToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+            this.componentToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
             this.componentToolStripMenuItem.Text = "Компоненты";
             this.componentToolStripMenuItem.Click += new System.EventHandler(this.ComponentsToolStripMenuItem_Click);
             // 
             // clientsToolStripMenuItem
             // 
             this.clientsToolStripMenuItem.Name = "clientsToolStripMenuItem";
-            this.clientsToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+            this.clientsToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
             this.clientsToolStripMenuItem.Text = "Клиенты";
             this.clientsToolStripMenuItem.Click += new System.EventHandler(this.ClientsToolStripMenuItem_Click);
             // 
             // исполнителиToolStripMenuItem
             // 
             this.исполнителиToolStripMenuItem.Name = "исполнителиToolStripMenuItem";
-            this.исполнителиToolStripMenuItem.Size = new System.Drawing.Size(180, 22);
+            this.исполнителиToolStripMenuItem.Size = new System.Drawing.Size(149, 22);
             this.исполнителиToolStripMenuItem.Text = "Исполнители";
             this.исполнителиToolStripMenuItem.Click += new System.EventHandler(this.ImplementersToolStripMenuItem_Click);
             // 
@@ -190,6 +192,13 @@
             this.письмаToolStripMenuItem.Text = "Письма";
             this.письмаToolStripMenuItem.Click += new System.EventHandler(this.MailToolStripMenuItem_Click);
             // 
+            // создатьБэкапToolStripMenuItem
+            // 
+            this.создатьБэкапToolStripMenuItem.Name = "создатьБэкапToolStripMenuItem";
+            this.создатьБэкапToolStripMenuItem.Size = new System.Drawing.Size(97, 20);
+            this.создатьБэкапToolStripMenuItem.Text = "Создать бэкап";
+            this.создатьБэкапToolStripMenuItem.Click += new System.EventHandler(this.CreateBackupToolStripMenuItem_Click);
+            // 
             // FormMain
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
@@ -229,5 +238,6 @@
         private ToolStripMenuItem исполнителиToolStripMenuItem;
         private ToolStripMenuItem запускРаботToolStripMenuItem;
         private ToolStripMenuItem письмаToolStripMenuItem;
+        private ToolStripMenuItem создатьБэкапToolStripMenuItem;
     }
 }
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlant/FormMain.cs b/PrecastConcretePlant/PrecastConcretePlant/FormMain.cs
index 9d3b93c..fcf7401 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/FormMain.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormMain.cs
@@ -3,6 +3,7 @@ using PrecastConcretePlant;
 using PrecastConcretePlantBusinessLogic;
 using PrecastConcretePlantContracts.BindingModels;
 using PrecastConcretePlantContracts.BusinessLogicsContracts;
+using PrecastConcretePlantContracts.DI;
 using PrecastConcretePlantDataModels.Enums;
 
 
@@ -14,13 +15,15 @@ namespace PrecastConcretePlantView
         private readonly IOrderLogic _orderLogic;
         private readonly IReportLogic _reportLogic;
         private readonly IWorkProcess _workProcess;
-        public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess)
+        private readonly IBackUpLogic _backUpLogic;
+        public FormMain(ILogger<FormMain> logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workProcess, IBackUpLogic backUpLogic)
         {
             InitializeComponent();
             _logger = logger;
             _orderLogic = orderLogic;
             _reportLogic = reportLogic;
             _workProcess = workProcess;
+            _backUpLogic = backUpLogic;
         }
         private void FormMain_Load(object sender, EventArgs e)
         {
@@ -30,18 +33,7 @@ namespace PrecastConcretePlantView
         {
             try
             {
-                var list = _orderLogic.ReadList(null);
-                if (list != null)
-                {
-                    dataGridView.DataSource = list;
-                    dataGridView.Columns["Id"].HeaderText = "Номер заказа";
-                    dataGridView.Columns["ReinforcedId"].Visible = false;
-                    dataGridView.Columns["ClientId"].Visible = false;
-                    dataGridView.Columns["ImplementerId"].Visible = false;
-                    dataGridView.Columns["ReinforcedName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
-                    dataGridView.Columns["ClientFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
-                    dataGridView.Columns["ImplementerFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
-                }
+                dataGridView.FillAndConfigGrid(_orderLogic.ReadList(null));
                 _logger.LogInformation("Загрузка заказов");
             }
             catch (Exception ex)
@@ -54,30 +46,20 @@ namespace PrecastConcretePlantView
         private void ComponentsToolStripMenuItem_Click(object sender, EventArgs
         e)
         {
-            var service = Program.ServiceProvider?.GetService(typeof(FormComponents));
-            if (service is FormComponents form)
-            {
-                form.ShowDialog();
-            }
+            var form = DependencyManager.Instance.Resolve<FormComponents>();
+            form.ShowDialog();
         }
         private void ReinforcedToolStripMenuItem_Click(object sender, EventArgs e)
         {
-            var service = Program.ServiceProvider?.GetService(typeof(FormViewReinforced));
-            if (service is FormViewReinforced form)
-            {
-                form.ShowDialog();
-            }
+            var form = DependencyManager.Instance.Resolve<FormViewReinforced>();
+            form.ShowDialog();
         }
 
         private void ButtonCreateOrder_Click(object sender, EventArgs e)
         {
-            var service =
-            Program.ServiceProvider?.GetService(typeof(FormCreateOrder));
-            if (service is FormCreateOrder form)
-            {
-                form.ShowDialog();
-                LoadData();
-            }
+            var form = DependencyManager.Instance.Resolve<FormCreateOrder>();
+            form.ShowDialog();
+            LoadData();
         }
 
         private void ButtonTakeOrderInWork_Click(object sender, EventArgs e)
@@ -114,7 +96,8 @@ namespace PrecastConcretePlantView
                 {
                     var operationResult = _orderLogic.FinishOrder(new OrderBindingModel
                     {
-                        Id = id
+                        Id = id,
+                        Status = orderStatus
                     });
                     if (!operationResult)
                     {
@@ -173,38 +156,26 @@ namespace PrecastConcretePlantView
 
         private void ReinforcedComponentsToolStripMenuItem_Click(object sender, EventArgs e)
         {
-            var service = Program.ServiceProvider?.GetService(typeof(FormReportReinforcedComponents));
-            if (service is FormReportReinforcedComponents form)
-            {
-                form.ShowDialog();
-            }
+            var form = DependencyManager.Instance.Resolve<FormReportReinforcedComponents>();
+            form.ShowDialog();
         }
 
         private void OrdersToolStripMenuItem_Click(object sender, EventArgs e)
         {
-            var service = Program.ServiceProvider?.GetService(typeof(FormReportOrders));
-            if (service is FormReportOrders form)
-            {
-                form.ShowDialog();
-            }
+            var form = DependencyManager.Instance.Resolve<FormReportOrders>();
+            form.ShowDialog();
         }
 
         private void ClientsToolStripMenuItem_Click(object sender, EventArgs e)
         {
-            var service = Program.ServiceProvider?.GetService(typeof(FormClients));
-            if (service is FormClients form)
-            {
-                form.ShowDialog();
-            }
+            var form = DependencyManager.Instance.Resolve<FormClients>();
+            form.ShowDialog();
         }
 
         private void ImplementersToolStripMenuItem_Click(object sender, EventArgs e)
         {
-            var service = Program.ServiceProvider?.GetService(typeof(FormViewImplementers));
-            if (service is FormViewImplementers form)
-            {
-                form.ShowDialog();
-            }
+            var form = DependencyManager.Instance.Resolve<FormViewImplementers>();
+            form.ShowDialog();
         }
 
         private void DoWorkToolStripMenuItem_Click(object sender, EventArgs e)
@@ -218,10 +189,31 @@ namespace PrecastConcretePlantView
 
         private void MailToolStripMenuItem_Click(object sender, EventArgs e)
         {
-            var service = Program.ServiceProvider?.GetService(typeof(FormViewMail));
-            if (service is FormViewMail form)
+            var form = DependencyManager.Instance.Resolve<FormViewMail>();
+            form.ShowDialog();
+        }
+        private void CreateBackupToolStripMenuItem_Click(object sender, EventArgs e)
+        {
+            try
             {
-                form.ShowDialog();
+                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/PrecastConcretePlant/PrecastConcretePlant/FormReinforced.cs b/PrecastConcretePlant/PrecastConcretePlant/FormReinforced.cs
index 9378438..2e4741b 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/FormReinforced.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormReinforced.cs
@@ -2,6 +2,7 @@
 using PrecastConcretePlant;
 using PrecastConcretePlantContracts.BindingModels;
 using PrecastConcretePlantContracts.BusinessLogicsContracts;
+using PrecastConcretePlantContracts.DI;
 using PrecastConcretePlantContracts.SearchModels;
 using PrecastConcretePlantDataModels.Models;
 
@@ -73,51 +74,44 @@ namespace PrecastConcretePlantView
         }
         private void ButtonAdd_Click(object sender, EventArgs e)
         {
-            var service = Program.ServiceProvider?.GetService(typeof(FormReinforcedComponent));
-            if (service is FormReinforcedComponent form)
+            var form = DependencyManager.Instance.Resolve<FormReinforcedComponent>();
+            if (form.ShowDialog() == DialogResult.OK)
             {
-                if (form.ShowDialog() == DialogResult.OK)
+                if (form.ComponentModel == null)
                 {
-                    if (form.ComponentModel == null)
-                    {
-                        return;
-                    }
-                    _logger.LogInformation("Добавление нового компонента: { ComponentName}- { Count}",
-                        form.ComponentModel.ComponentName, form.Count);
-                    if (_reinforcedComponents.ContainsKey(form.Id))
-                    {
-                        _reinforcedComponents[form.Id] = (form.ComponentModel, form.Count);
-                    }
-                    else
-                    {
-                        _reinforcedComponents.Add(form.Id, (form.ComponentModel, form.Count));
-                    }
-                    LoadData();
+                    return;
                 }
+                _logger.LogInformation("Добавление нового компонента: { ComponentName}- { Count}",
+                    form.ComponentModel.ComponentName, form.Count);
+                if (_reinforcedComponents.ContainsKey(form.Id))
+                {
+                    _reinforcedComponents[form.Id] = (form.ComponentModel, form.Count);
+                }
+                else
+                {
+                    _reinforcedComponents.Add(form.Id, (form.ComponentModel, form.Count));
+                }
+                LoadData();
             }
         }
         private void ButtonUpd_Click(object sender, EventArgs e)
         {
             if (dataGridView.SelectedRows.Count == 1)
             {
-                var service = Program.ServiceProvider?.GetService(typeof(FormReinforcedComponent));
-                if (service is FormReinforcedComponent form)
+                var form = DependencyManager.Instance.Resolve<FormReinforcedComponent>();
+                int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value);
+                form.Id = id;
+                form.Count = _reinforcedComponents[id].Item2;
+                if (form.ShowDialog() == DialogResult.OK)
                 {
-                    int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value);
-                    form.Id = id;
-                    form.Count = _reinforcedComponents[id].Item2;
-                    if (form.ShowDialog() == DialogResult.OK)
+                    if (form.ComponentModel == null)
                     {
-                        if (form.ComponentModel == null)
-                        {
-                            return;
-                        }
-                        _logger.LogInformation("Изменение компонента: { ComponentName} - { Count} ",
-                            form.ComponentModel.ComponentName, form.Count);
-                        _reinforcedComponents[form.Id] = (form.ComponentModel,
-                        form.Count);
-                        LoadData();
+                        return;
                     }
+                    _logger.LogInformation("Изменение компонента: { ComponentName} - { Count} ",
+                        form.ComponentModel.ComponentName, form.Count);
+                    _reinforcedComponents[id] = (form.ComponentModel, form.Count);
+                    LoadData();
                 }
             }
         }
diff --git a/PrecastConcretePlant/PrecastConcretePlant/FormViewImplementers.cs b/PrecastConcretePlant/PrecastConcretePlant/FormViewImplementers.cs
index b38f18e..407eb6c 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/FormViewImplementers.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormViewImplementers.cs
@@ -2,6 +2,7 @@
 using PrecastConcretePlant;
 using PrecastConcretePlantContracts.BindingModels;
 using PrecastConcretePlantContracts.BusinessLogicsContracts;
+using PrecastConcretePlantContracts.DI;
 
 namespace PrecastConcretePlantView
 {
@@ -23,13 +24,7 @@ namespace PrecastConcretePlantView
         {
             try
             {
-                var list = _logic.ReadList(null);
-                if (list != null)
-                {
-                    dataGridView.DataSource = list;
-                    dataGridView.Columns["Id"].Visible = false;
-                    dataGridView.Columns["ImplementerFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
-                }
+                dataGridView.FillAndConfigGrid(_logic.ReadList(null));
                 _logger.LogInformation("Загрузка исполнителей");
             }
             catch (Exception ex)
@@ -41,27 +36,21 @@ namespace PrecastConcretePlantView
         }
         private void ButtonAdd_Click(object sender, EventArgs e)
         {
-            var service = Program.ServiceProvider?.GetService(typeof(FormImplementer));
-            if (service is FormImplementer form)
+            var form = DependencyManager.Instance.Resolve<FormImplementer>();
+            if (form.ShowDialog() == DialogResult.OK)
             {
-                if (form.ShowDialog() == DialogResult.OK)
-                {
-                    LoadData();
-                }
+                LoadData();
             }
         }
         private void ButtonUpd_Click(object sender, EventArgs e)
         {
             if (dataGridView.SelectedRows.Count == 1)
             {
-                var service = Program.ServiceProvider?.GetService(typeof(FormImplementer));
-                if (service is FormImplementer form)
+                var form = DependencyManager.Instance.Resolve<FormImplementer>();
+                form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
+                if (form.ShowDialog() == DialogResult.OK)
                 {
-                    form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
-                    if (form.ShowDialog() == DialogResult.OK)
-                    {
-                        LoadData();
-                    }
+                    LoadData();
                 }
             }
         }
diff --git a/PrecastConcretePlant/PrecastConcretePlant/FormViewMail.cs b/PrecastConcretePlant/PrecastConcretePlant/FormViewMail.cs
index 11f17c4..48a3e8e 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/FormViewMail.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormViewMail.cs
@@ -19,14 +19,7 @@ namespace PrecastConcretePlantView
         {
             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/PrecastConcretePlant/PrecastConcretePlant/FormViewReinforced.cs b/PrecastConcretePlant/PrecastConcretePlant/FormViewReinforced.cs
index 29a50ab..3b4a5aa 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/FormViewReinforced.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormViewReinforced.cs
@@ -2,6 +2,7 @@
 using PrecastConcretePlant;
 using PrecastConcretePlantContracts.BindingModels;
 using PrecastConcretePlantContracts.BusinessLogicsContracts;
+using PrecastConcretePlantContracts.DI;
 
 namespace PrecastConcretePlantView
 {
@@ -23,15 +24,7 @@ namespace PrecastConcretePlantView
         {
             try
             {
-                var list = _logic.ReadList(null);
-                if (list != null)
-                {
-                    dataGridView.DataSource = list;
-                    dataGridView.Columns["Id"].Visible = false;
-                    dataGridView.Columns["ReinforcedComponents"].Visible = false;
-                    dataGridView.Columns["ReinforcedName"].AutoSizeMode =
-                    DataGridViewAutoSizeColumnMode.Fill;
-                }
+                dataGridView.FillAndConfigGrid(_logic.ReadList(null));
                 _logger.LogInformation("Загрузка изделий");
             }
             catch (Exception ex)
@@ -43,31 +36,23 @@ namespace PrecastConcretePlantView
         }
         private void ButtonAdd_Click(object sender, EventArgs e)
         {
-            var service = Program.ServiceProvider?.GetService(typeof(FormReinforced));
-            if (service is FormReinforced form)
+            var form = DependencyManager.Instance.Resolve<FormReinforced>();
+            if (form.ShowDialog() == DialogResult.OK)
             {
-                if (form.ShowDialog() == DialogResult.OK)
-                {
-                    LoadData();
-                }
+                LoadData();
             }
         }
         private void ButtonUpd_Click(object sender, EventArgs e)
         {
             if (dataGridView.SelectedRows.Count == 1)
             {
-                var service =
-                Program.ServiceProvider?.GetService(typeof(FormComponent));
-                if (service is FormComponent form)
+                var form = DependencyManager.Instance.Resolve<FormReinforced>();
+                form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
+                if (form.ShowDialog() == DialogResult.OK)
                 {
-                    form.Id =
-                    Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
-                    if (form.ShowDialog() == DialogResult.OK)
-                    {
-
-                    }
+                    LoadData();
                 }
-                LoadData();
+
             }
         }
         private void ButtonDel_Click(object sender, EventArgs e)
diff --git a/PrecastConcretePlant/PrecastConcretePlant/Program.cs b/PrecastConcretePlant/PrecastConcretePlant/Program.cs
index 3cf23ba..e6e9489 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/Program.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/Program.cs
@@ -1,8 +1,5 @@
-using PrecastConcretePlantDatabaseImplement.Implements;
 using PrecastConcretePlantBusinessLogic.BusinessLogic;
 using PrecastConcretePlantContracts.BusinessLogicsContracts;
-using PrecastConcretePlantContracts.StoragesContract;
-using PrecastConcretePlantDatabaseImplement;
 using PrecastConcretePlantView;
 using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
@@ -11,16 +8,14 @@ using PrecastConcretePlantBusinessLogic.OfficePackage.Implement;
 using PrecastConcretePlantBusinessLogic.OfficePackage;
 using PrecastConcretePlantBusinessLogic.MailWorker;
 using PrecastConcretePlantContracts.BindingModels;
+using PrecastConcretePlantContracts.DI;
 
 namespace PrecastConcretePlant
-
 {
     internal static class Program
     {
-        private static ServiceProvider? _serviceProvider;
-        public static ServiceProvider? ServiceProvider => _serviceProvider;
         /// <summary>
-        ///  The main entry point for the application.
+        /// The main entry point for the application.
         /// </summary>
         [STAThread]
         static void Main()
@@ -28,12 +23,11 @@ namespace PrecastConcretePlant
             // 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();
+            InitDependency();
+
             try
             {
-                var mailSender = _serviceProvider.GetService<AbstractMailWorker>();
+                var mailSender = DependencyManager.Instance.Resolve<AbstractMailWorker>();
                 mailSender?.MailConfig(new MailConfigBindingModel
                 {
                     MailLogin = System.Configuration.ConfigurationManager.AppSettings["MailLogin"] ?? string.Empty,
@@ -49,56 +43,53 @@ namespace PrecastConcretePlant
             }
             catch (Exception ex)
             {
-                var logger = _serviceProvider.GetService<ILogger>();
+                var logger = DependencyManager.Instance.Resolve<ILogger>();
                 logger?.LogError(ex, "������ ������ � ������");
             }
-            Application.Run(_serviceProvider.GetRequiredService<FormMain>());
+            Application.Run(DependencyManager.Instance.Resolve<FormMain>());
         }
 
-        private static void ConfigureServices(ServiceCollection services)
+        private static void InitDependency()
         {
-            services.AddLogging(option =>
+            DependencyManager.InitDependency();
+
+            DependencyManager.Instance.AddLogging(option =>
             {
                 option.SetMinimumLevel(LogLevel.Information);
                 option.AddNLog("nlog.config");
             });
-            services.AddTransient<IComponentStorage, ComponentStorage>();
-            services.AddTransient<IOrderStorage, OrderStorage>();
-            services.AddTransient<IReinforcedStorage, ReinforcedStorage>();
-            services.AddTransient<IClientStorage, ClientStorage>();
-            services.AddTransient<IImplementerStorage, ImplementerStorage>();
-            services.AddTransient<IMessageInfoStorage, MessageInfoStorage>();
 
-            services.AddTransient<IComponentLogic, ComponentLogic>();
-            services.AddTransient<IOrderLogic, OrderLogic>();
-            services.AddTransient<IReinforcedLogic, ReinforcedLogic>();
-            services.AddTransient<IReportLogic, ReportLogic>();
-            services.AddTransient<IClientLogic, ClientLogic>();
-            services.AddTransient<IImplementerLogic, ImplementerLogic>();
-            services.AddTransient<IWorkProcess, WorkModeling>();
-            services.AddTransient<IMessageInfoLogic, MessageInfoLogic>();
+            DependencyManager.Instance.RegisterType<IComponentLogic, ComponentLogic>();
+            DependencyManager.Instance.RegisterType<IOrderLogic, OrderLogic>();
+            DependencyManager.Instance.RegisterType<IReinforcedLogic, ReinforcedLogic>();
+            DependencyManager.Instance.RegisterType<IReportLogic, ReportLogic>();
+            DependencyManager.Instance.RegisterType<IClientLogic, ClientLogic>();
+            DependencyManager.Instance.RegisterType<IImplementerLogic, ImplementerLogic>();
+            DependencyManager.Instance.RegisterType<IMessageInfoLogic, MessageInfoLogic>();
+            DependencyManager.Instance.RegisterType<IWorkProcess, WorkModeling>();
+            DependencyManager.Instance.RegisterType<IBackUpLogic, BackUpLogic>();
 
-            services.AddTransient<AbstractSaveToExcel, SaveToExcel>();
-            services.AddTransient<AbstractSaveToWord, SaveToWord>();
-            services.AddTransient<AbstractSaveToPdf, SaveToPdf>();
+            DependencyManager.Instance.RegisterType<AbstractMailWorker, MailKitWorker>(true);
 
-            services.AddSingleton<AbstractMailWorker, MailKitWorker>();
+            DependencyManager.Instance.RegisterType<AbstractSaveToExcel, SaveToExcel>();
+            DependencyManager.Instance.RegisterType<AbstractSaveToWord, SaveToWord>();
+            DependencyManager.Instance.RegisterType<AbstractSaveToPdf, SaveToPdf>();
 
-            services.AddTransient<FormMain>();
-            services.AddTransient<FormComponent>();
-            services.AddTransient<FormComponents>();
-            services.AddTransient<FormCreateOrder>();
-            services.AddTransient<FormReinforced>();
-            services.AddTransient<FormReinforcedComponent>();
-            services.AddTransient<FormViewReinforced>();
-            services.AddTransient<FormReportReinforcedComponents>();
-            services.AddTransient<FormReportOrders>();
-            services.AddTransient<FormClients>();
-            services.AddTransient<FormViewImplementers>();
-            services.AddTransient<FormImplementer>();
-            services.AddTransient<FormViewMail>();
+            DependencyManager.Instance.RegisterType<FormMain>();
+            DependencyManager.Instance.RegisterType<FormComponent>();
+            DependencyManager.Instance.RegisterType<FormComponents>();
+            DependencyManager.Instance.RegisterType<FormCreateOrder>();
+            DependencyManager.Instance.RegisterType<FormReinforced>();
+            DependencyManager.Instance.RegisterType<FormReinforcedComponent>();
+            DependencyManager.Instance.RegisterType<FormViewReinforced>();
+            DependencyManager.Instance.RegisterType<FormReportReinforcedComponents>();
+            DependencyManager.Instance.RegisterType<FormReportOrders>();
+            DependencyManager.Instance.RegisterType<FormClients>();
+            DependencyManager.Instance.RegisterType<FormViewImplementers>();
+            DependencyManager.Instance.RegisterType<FormImplementer>();
+            DependencyManager.Instance.RegisterType<FormViewMail>();
         }
 
-        private static void MailCheck(object obj) => ServiceProvider?.GetService<AbstractMailWorker>()?.MailCheck();
+        private static void MailCheck(object obj) => DependencyManager.Instance.Resolve<AbstractMailWorker>()?.MailCheck();
     }
 }
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/BackUpLogic.cs b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/BackUpLogic.cs
new file mode 100644
index 0000000..19872ae
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantBusinessLogic/BusinessLogic/BackUpLogic.cs
@@ -0,0 +1,99 @@
+using Microsoft.Extensions.Logging;
+using PrecastConcretePlantContracts.BindingModels;
+using PrecastConcretePlantContracts.BusinessLogicsContracts;
+using PrecastConcretePlantContracts.StoragesContract;
+using PrecastConcretePlantDataModels;
+using System.IO.Compression;
+using System.Reflection;
+using System.Runtime.Serialization.Json;
+
+
+namespace PrecastConcretePlantBusinessLogic.BusinessLogic
+{
+    public class BackUpLogic : IBackUpLogic
+    {
+        private readonly ILogger _logger;
+
+        private readonly IBackUpInfo _backUpInfo;
+
+        public BackUpLogic(ILogger<BackUpLogic> 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<T>(string folderName) where T : class, new()
+        {
+            var records = _backUpInfo.GetList<T>();
+            if (records == null)
+            {
+                _logger.LogWarning("{type} type get null list", typeof(T).Name);
+                return;
+            }
+            var jsonFormatter = new DataContractJsonSerializer(typeof(List<T>));
+            using var fs = new FileStream(string.Format("{0}/{1}.json", folderName, typeof(T).Name), FileMode.OpenOrCreate);
+            jsonFormatter.WriteObject(fs, records);
+        }
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/Attributes/ColumnAttribute.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/Attributes/ColumnAttribute.cs
new file mode 100644
index 0000000..2b85d8f
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/Attributes/ColumnAttribute.cs
@@ -0,0 +1,25 @@
+namespace PrecastConcretePlantContracts.Attributes
+{
+    [AttributeUsage(AttributeTargets.Property)]
+    public class ColumnAttribute : Attribute
+    {
+        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 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;
+        }
+    }
+}
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/Attributes/GridViewAutoSize.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/Attributes/GridViewAutoSize.cs
new file mode 100644
index 0000000..adeefab
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/Attributes/GridViewAutoSize.cs
@@ -0,0 +1,21 @@
+namespace PrecastConcretePlantContracts.Attributes
+{
+    public enum GridViewAutoSize
+    {
+        NotSet = 0,
+
+        None = 1,
+
+        ColumnHeader = 2,
+
+        AllCellsExceptHeader = 4,
+
+        AllCells = 6,
+
+        DisplayedCellsExceptHeader = 8,
+
+        DisplayedCells = 10,
+
+        Fill = 16
+    }
+}
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/BackUpSaveBinidngModel.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/BackUpSaveBinidngModel.cs
new file mode 100644
index 0000000..a39f442
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/BackUpSaveBinidngModel.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PrecastConcretePlantContracts.BindingModels
+{
+    public class BackUpSaveBinidngModel
+    {
+        public string FolderName { get; set; } = string.Empty;
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MessageInfoBindingModel.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MessageInfoBindingModel.cs
index d836814..ac190a5 100644
--- a/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MessageInfoBindingModel.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/BindingModels/MessageInfoBindingModel.cs
@@ -15,5 +15,7 @@ namespace PrecastConcretePlantContracts.BindingModels
         public string Body { get; set; } = string.Empty;
 
         public DateTime DateDelivery { get; set; }
+
+        public int Id => throw new NotImplementedException();
     }
 }
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/BusinessLogicsContracts/IBackUpLogic.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/BusinessLogicsContracts/IBackUpLogic.cs
new file mode 100644
index 0000000..84baecd
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/BusinessLogicsContracts/IBackUpLogic.cs
@@ -0,0 +1,10 @@
+using PrecastConcretePlantContracts.BindingModels;
+
+
+namespace PrecastConcretePlantContracts.BusinessLogicsContracts
+{
+    public interface IBackUpLogic
+    {
+        void CreateBackUp(BackUpSaveBinidngModel model);
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/DI/DependencyManager.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/DI/DependencyManager.cs
new file mode 100644
index 0000000..347eaec
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/DI/DependencyManager.cs
@@ -0,0 +1,61 @@
+using Microsoft.Extensions.Logging;
+
+namespace PrecastConcretePlantContracts.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; } }
+
+        /// <summary>
+        /// Иницализация библиотек, в которых идут установки зависомстей
+        /// </summary>
+        public static void InitDependency()
+        {
+            var ext = ServiceProviderLoader.GetImplementationExtensions();
+            if (ext == null)
+            {
+                throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей по модулям");
+            }
+            // регистрируем зависимости
+            ext.RegisterServices();
+        }
+
+        /// <summary>
+        /// Регистрация логгера
+        /// </summary>
+        /// <param name="configure"></param>
+        public void AddLogging(Action<ILoggingBuilder> configure) => _dependencyManager.AddLogging(configure);
+
+        /// <summary>
+        /// Добавление зависимости
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="U"></typeparam>
+        public void RegisterType<T, U>(bool isSingle = false) where U : class, T where T : class => _dependencyManager.RegisterType<T, U>(isSingle);
+
+        /// <summary>
+        /// Добавление зависимости
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="U"></typeparam>
+        public void RegisterType<T>(bool isSingle = false) where T : class => _dependencyManager.RegisterType<T>(isSingle);
+
+        /// <summary>
+        /// Получение класса со всеми зависмостями
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <returns></returns>
+        public T Resolve<T>() => _dependencyManager.Resolve<T>();
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/DI/IDependencyContainer.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/DI/IDependencyContainer.cs
new file mode 100644
index 0000000..97df256
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/DI/IDependencyContainer.cs
@@ -0,0 +1,40 @@
+using Microsoft.Extensions.Logging;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PrecastConcretePlantContracts.DI
+{
+    public interface IDependencyContainer
+    {
+        /// <summary>
+        /// Регистрация логгера
+        /// </summary>
+        /// <param name="configure"></param>
+        void AddLogging(Action<ILoggingBuilder> configure);
+
+        /// <summary>
+        /// Добавление зависимости
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <typeparam name="U"></typeparam>
+        /// <param name="isSingle"></param>
+        void RegisterType<T, U>(bool isSingle) where U : class, T where T : class;
+
+        /// <summary>
+        /// Добавление зависимости
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="isSingle"></param>
+        void RegisterType<T>(bool isSingle) where T : class;
+
+        /// <summary>
+        /// Получение класса со всеми зависмостями
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <returns></returns>
+        T Resolve<T>();
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/DI/IImplementationExtension.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/DI/IImplementationExtension.cs
new file mode 100644
index 0000000..d2091f7
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/DI/IImplementationExtension.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PrecastConcretePlantContracts.DI
+{
+    public interface IImplementationExtension
+    {
+        public int Priority { get; }
+        /// <summary>
+        /// Регистрация сервисов
+        /// </summary>
+        public void RegisterServices();
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/DI/ServiceDependencyContainer.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/DI/ServiceDependencyContainer.cs
new file mode 100644
index 0000000..370a42e
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/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 PrecastConcretePlantContracts.DI
+{
+    public class ServiceDependencyContainer : IDependencyContainer
+    {
+        private ServiceProvider? _serviceProvider;
+
+        private readonly ServiceCollection _serviceCollection;
+
+        public ServiceDependencyContainer()
+        {
+            _serviceCollection = new ServiceCollection();
+        }
+
+        public void AddLogging(Action<ILoggingBuilder> configure)
+        {
+            _serviceCollection.AddLogging(configure);
+        }
+
+        public void RegisterType<T, U>(bool isSingle) where U : class, T where T : class
+        {
+            if (isSingle)
+            {
+                _serviceCollection.AddSingleton<T, U>();
+            }
+            else
+            {
+                _serviceCollection.AddTransient<T, U>();
+            }
+            _serviceProvider = null;
+        }
+
+        public void RegisterType<T>(bool isSingle) where T : class
+        {
+            if (isSingle)
+            {
+                _serviceCollection.AddSingleton<T>();
+            }
+            else
+            {
+                _serviceCollection.AddTransient<T>();
+            }
+            _serviceProvider = null;
+        }
+
+        public T Resolve<T>()
+        {
+            if (_serviceProvider == null)
+            {
+                _serviceProvider = _serviceCollection.BuildServiceProvider();
+            }
+            return _serviceProvider.GetService<T>()!;
+        }
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/DI/ServiceProviderLoader.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/DI/ServiceProviderLoader.cs
new file mode 100644
index 0000000..ee495dd
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/DI/ServiceProviderLoader.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PrecastConcretePlantContracts.DI
+{
+    public class ServiceProviderLoader
+    {
+        /// <summary>
+        /// Загрузка всех классов-реализаций IImplementationExtension
+        /// </summary>
+        /// <returns></returns>
+        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/PrecastConcretePlant/PrecastConcretePlantContracts/DI/UnityDependencyContainer.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/DI/UnityDependencyContainer.cs
new file mode 100644
index 0000000..910dcd6
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/DI/UnityDependencyContainer.cs
@@ -0,0 +1,38 @@
+using Microsoft.Extensions.Logging;
+using Unity.Microsoft.Logging;
+using Unity;
+
+namespace PrecastConcretePlantContracts.DI
+{
+    public class UnityDependencyContainer : IDependencyContainer
+    {
+        private readonly IUnityContainer _container;
+
+        public UnityDependencyContainer()
+        {
+            _container = new UnityContainer();
+        }
+
+        public void AddLogging(Action<ILoggingBuilder> configure)
+        {
+            var factory = LoggerFactory.Create(configure);
+            _container.AddExtension(new LoggingExtension(factory));
+        }
+
+        public void RegisterType<T>(bool isSingle) where T : class
+        {
+            _container.RegisterType<T>(isSingle ? TypeLifetime.Singleton : TypeLifetime.Transient);
+
+        }
+
+        public T Resolve<T>()
+        {
+            return _container.Resolve<T>();
+        }
+
+        void IDependencyContainer.RegisterType<T, U>(bool isSingle)
+        {
+            _container.RegisterType<T, U>(isSingle ? TypeLifetime.Singleton : TypeLifetime.Transient);
+        }
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/PrecastConcretePlantContracts.csproj b/PrecastConcretePlant/PrecastConcretePlantContracts/PrecastConcretePlantContracts.csproj
index 51219ff..96ec19f 100644
--- a/PrecastConcretePlant/PrecastConcretePlantContracts/PrecastConcretePlantContracts.csproj
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/PrecastConcretePlantContracts.csproj
@@ -6,6 +6,14 @@
     <Nullable>enable</Nullable>
   </PropertyGroup>
 
+  <ItemGroup>
+    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
+    <PackageReference Include="NLog" Version="5.1.4" />
+    <PackageReference Include="Unity" Version="5.11.10" />
+    <PackageReference Include="Unity.Microsoft.Logging" Version="5.11.1" />
+  </ItemGroup>
+
   <ItemGroup>
     <ProjectReference Include="..\PrecastConcretePlantDataModels\PrecastConcretePlantDataModels.csproj" />
   </ItemGroup>
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/StoragesContract/IBackUpInfo.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/StoragesContract/IBackUpInfo.cs
new file mode 100644
index 0000000..e7abcab
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/StoragesContract/IBackUpInfo.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PrecastConcretePlantContracts.StoragesContract
+{
+    public interface IBackUpInfo
+    {
+        List<T>? GetList<T>() where T : class, new();
+        Type? GetTypeByModelInterface(string modelInterfaceName);
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ClientViewModel.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ClientViewModel.cs
index 968d07d..b9dd1dc 100644
--- a/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ClientViewModel.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ClientViewModel.cs
@@ -1,16 +1,18 @@
-using PrecastConcretePlantDataModels;
+using PrecastConcretePlantContracts.Attributes;
+using PrecastConcretePlantDataModels;
 using System.ComponentModel;
 
 namespace PrecastConcretePlantContracts.ViewModels
 {
     public class ClientViewModel : IClientModel
     {
+        [Column(visible: false)]
         public int Id { get; set; }
-        [DisplayName("ФИО клиента")]
+        [Column("ФИО клиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
         public string ClientFIO { get; set; } = string.Empty;
-        [DisplayName("Логин (эл. почта)")]
+        [Column("Логин (эл. почта)", width: 150)]
         public string Email { get; set; } = string.Empty;
-        [DisplayName("Пароль")]
+        [Column("Пароль", width: 150)]
         public string Password { get; set; } = string.Empty;
     }
 }
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ComponentViewModel.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ComponentViewModel.cs
index e010eb4..56ff5ce 100644
--- a/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ComponentViewModel.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ComponentViewModel.cs
@@ -1,16 +1,18 @@
-using PrecastConcretePlantDataModels.Models;
+using PrecastConcretePlantContracts.Attributes;
+using PrecastConcretePlantDataModels.Models;
 using System.ComponentModel;
 
 namespace PrecastConcretePlantContracts.ViewModels
 {
     public class ComponentViewModel : IComponentModel
     {
+        [Column(visible: false)]
         public int Id { get; set; }
 
-        [DisplayName("Название компонента")]
+        [Column("Название компонента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
         public string ComponentName { get; set; } = string.Empty;
 
-        [DisplayName("Цена")]
+        [Column("Цена", width: 80)]
         public double Cost { get; set; }
     }
 }
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ImplementerViewModel.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ImplementerViewModel.cs
index 31e3dcd..fa78604 100644
--- a/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ImplementerViewModel.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ImplementerViewModel.cs
@@ -1,22 +1,24 @@
-using PrecastConcretePlantDataModels;
+using PrecastConcretePlantContracts.Attributes;
+using PrecastConcretePlantDataModels;
 using System.ComponentModel;
 
 namespace PrecastConcretePlantContracts.ViewModels
 {
     public class ImplementerViewModel : IImplementerModel
     {
+        [Column(visible: false)]
         public int Id { get; set; }
 
-        [DisplayName("ФИО исполнителя")]
+        [Column("ФИО исполнителя", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
         public string ImplementerFIO { get; set; } = string.Empty;
 
-        [DisplayName("Пароль")]
+        [Column("Пароль", width: 150)]
         public string Password { get; set; } = string.Empty;
 
-        [DisplayName("Стаж работы")]
+        [Column("Стаж работы", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
         public int WorkExperience { get; set; }
 
-        [DisplayName("Квалификация")]
+        [Column("Квалификация", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
         public int Qualification { get; set; }
     }
 }
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/MessageInfoViewModel.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/MessageInfoViewModel.cs
index 06177a8..4e26ec5 100644
--- a/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/MessageInfoViewModel.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/MessageInfoViewModel.cs
@@ -1,24 +1,31 @@
-using PrecastConcretePlantDataModels;
+using PrecastConcretePlantContracts.Attributes;
+using PrecastConcretePlantDataModels;
 using System.ComponentModel;
 
 namespace PrecastConcretePlantContracts.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("Отправитель", gridViewAutoSize: GridViewAutoSize.DisplayedCells, isUseAutoSize: true)]
         public string SenderName { get; set; } = string.Empty;
 
-        [DisplayName("Дата письма")]
+        [Column("Дата письма", width: 100)]
         public DateTime DateDelivery { get; set; }
 
-        [DisplayName("Заголовок")]
+        [Column("Заголовок", width: 150)]
         public string Subject { get; set; } = string.Empty;
 
-        [DisplayName("Текст")]
+        [Column("Текст", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
         public string Body { get; set; } = string.Empty;
+
+        [Column(visible: false)]
+
+        public int Id => throw new NotImplementedException();
     }
 }
\ No newline at end of file
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/OrderViewModel.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/OrderViewModel.cs
index 665ffb4..51e60c2 100644
--- a/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/OrderViewModel.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/OrderViewModel.cs
@@ -1,4 +1,5 @@
-using PrecastConcretePlantDataModels.Enums;
+using PrecastConcretePlantContracts.Attributes;
+using PrecastConcretePlantDataModels.Enums;
 using PrecastConcretePlantDataModels.Models;
 using System.ComponentModel;
 
@@ -6,30 +7,40 @@ namespace PrecastConcretePlantContracts.ViewModels
 {
     public class OrderViewModel : IOrderModel
     {
-        [DisplayName("Номер")]
+        [Column("Номер", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
         public int Id { get; set; }
+
+        [Column(visible: false)]
         public int ReinforcedId { get; set; }
+
+        [Column(visible: false)]
         public int ClientId { get; set; }
+
+        [Column(visible: false)]
         public int? ImplementerId { get; set; }
-        [DisplayName("Фамилия исполнителя")]
-        public string ImplementerFIO { get; set; } = string.Empty;
-        [DisplayName("Фамилия клиента")]
+
+        [Column("Фамилия клиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
         public string ClientFIO { get; set; } = string.Empty;
-        [DisplayName("Изделие")]
+
+        [Column("Фамилия исполнителя", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
+        public string ImplementerFIO { get; set; } = string.Empty;
+
+        [Column("Изделие", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
         public string ReinforcedName { get; set; } = string.Empty;
-        [DisplayName("Количество")]
+
+        [Column("Количество", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
         public int Count { get; set; }
 
-        [DisplayName("Сумма")]
+        [Column("Сумма", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
         public double Sum { get; set; }
 
-        [DisplayName("Статус")]
+        [Column("Статус", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
         public OrderStatus Status { get; set; } = OrderStatus.Неизвестен;
 
-        [DisplayName("Дата создания")]
+        [Column("Дата создания", width: 100)]
         public DateTime DateCreate { get; set; } = DateTime.Now;
 
-        [DisplayName("Дата выполнения")]
+        [Column("Дата выполнения", width: 100)]
         public DateTime? DateImplement { get; set; }
     }
 }
diff --git a/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ReinforcedViewModel.cs b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ReinforcedViewModel.cs
index 252f6ff..0495e64 100644
--- a/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ReinforcedViewModel.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantContracts/ViewModels/ReinforcedViewModel.cs
@@ -1,15 +1,17 @@
-using PrecastConcretePlantDataModels.Models;
-using System.ComponentModel;
+using PrecastConcretePlantContracts.Attributes;
+using PrecastConcretePlantDataModels.Models;
 
 namespace PrecastConcretePlantContracts.ViewModels
 {
     public class ReinforcedViewModel : IReinforcedModel
     {
+        [Column(visible: false)]
         public int Id { get; set; }
-        [DisplayName("Название изделия")]
+        [Column("Название изделия", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
         public string ReinforcedName { get; set; } = string.Empty;
-        [DisplayName("Цена")]
+        [Column("Цена", width: 100)]
         public double Price { get; set; }
+        [Column(visible: false)]
         public Dictionary<int, (IComponentModel, int)> ReinforcedComponents
         {
             get;
diff --git a/PrecastConcretePlant/PrecastConcretePlantDataModels/IMessageInfoModel.cs b/PrecastConcretePlant/PrecastConcretePlantDataModels/IMessageInfoModel.cs
index 50bfbce..7f08048 100644
--- a/PrecastConcretePlant/PrecastConcretePlantDataModels/IMessageInfoModel.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantDataModels/IMessageInfoModel.cs
@@ -1,6 +1,6 @@
 namespace PrecastConcretePlantDataModels
 {
-    public interface IMessageInfoModel
+    public interface IMessageInfoModel : IId
     {
         string MessageId { get; }
 
diff --git a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/BackUpInfo.cs b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/BackUpInfo.cs
new file mode 100644
index 0000000..c37348b
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/BackUpInfo.cs
@@ -0,0 +1,26 @@
+using PrecastConcretePlantContracts.StoragesContract;
+
+namespace PrecastConcretePlantDatabaseImplement
+{
+    public class BackUpInfo : IBackUpInfo
+    {
+        public List<T>? GetList<T>() where T : class, new()
+        {
+            using var context = new PrecastConcretePlantDatabase();
+            return context.Set<T>().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/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Client.cs b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Client.cs
index 5f06395..af88480 100644
--- a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Client.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Client.cs
@@ -4,20 +4,26 @@ using PrecastConcretePlantDataModels;
 using System.ComponentModel.DataAnnotations.Schema;
 using System.ComponentModel.DataAnnotations;
 using PrecastConcretePlantDatabaseImplement.Models;
+using System.Runtime.Serialization;
 
 namespace PrecastConcretePlantDatabaseImplement
 {
+    [DataContract]
     public class Client : IClientModel
     {
         [Required]
+        [DataMember]
         public string ClientFIO { get; private set; } = string.Empty;
 
         [Required]
+        [DataMember]
         public string Email { get; private set; } = string.Empty;
 
         [Required]
+        [DataMember]
         public string Password { get; private set; } = string.Empty;
 
+        [DataMember]
         public int Id { get; private set; }
 
         [ForeignKey("ClientId")]
diff --git a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Component.cs b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Component.cs
index 4a5259b..55ccae9 100644
--- a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Component.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Component.cs
@@ -3,15 +3,20 @@ using PrecastConcretePlantContracts.ViewModels;
 using PrecastConcretePlantDataModels.Models;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
 
 namespace PrecastConcretePlantDatabaseImplement.Models
 {
+    [DataContract]
     public class Component : IComponentModel
     {
+        [DataMember]
         public int Id { get; private set; }
         [Required]
+        [DataMember]
         public string ComponentName { get; private set; } = string.Empty;
         [Required]
+        [DataMember]
         public double Cost { get; set; }
         [ForeignKey("ComponentId")]
         public virtual List<ReinforcedComponent> ReinforcedComponents { get; set; } = new();
diff --git a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/DatabaseImplementationExtension.cs b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/DatabaseImplementationExtension.cs
new file mode 100644
index 0000000..c7030fd
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/DatabaseImplementationExtension.cs
@@ -0,0 +1,23 @@
+using PrecastConcretePlantContracts.DI;
+using PrecastConcretePlantContracts.StoragesContract;
+using PrecastConcretePlantDatabaseImplement.Implements;
+
+namespace PrecastConcretePlantDatabaseImplement
+{
+    public class DatabaseImplementationExtension : IImplementationExtension
+    {
+        public int Priority => 2;
+
+        public void RegisterServices()
+        {
+            DependencyManager.Instance.RegisterType<IClientStorage, ClientStorage>();
+            DependencyManager.Instance.RegisterType<IComponentStorage, ComponentStorage>();
+            DependencyManager.Instance.RegisterType<IImplementerStorage, ImplementerStorage>();
+            DependencyManager.Instance.RegisterType<IMessageInfoStorage, MessageInfoStorage>();
+            DependencyManager.Instance.RegisterType<IOrderStorage, OrderStorage>();
+            DependencyManager.Instance.RegisterType<IReinforcedStorage, ReinforcedStorage>();
+            DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
+        }
+
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Implementer.cs b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Implementer.cs
index 400b244..349babd 100644
--- a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Implementer.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Implementer.cs
@@ -3,20 +3,22 @@ using PrecastConcretePlantContracts.ViewModels;
 using PrecastConcretePlantDatabaseImplement.Models;
 using PrecastConcretePlantDataModels;
 using System.ComponentModel.DataAnnotations.Schema;
-
+using System.Runtime.Serialization;
 
 namespace PrecastConcretePlantDatabaseImplement
 {
+    [DataContract]
     public class Implementer : IImplementerModel
     {
+        [DataMember]
         public int Id { get; private set; }
-
+        [DataMember]
         public string ImplementerFIO { get; private set; } = string.Empty;
-
+        [DataMember]
         public string Password { get; private set; } = string.Empty;
-
+        [DataMember]
         public int WorkExperience { get; private set; }
-
+        [DataMember]
         public int Qualification { get; private set; }
 
         [ForeignKey("ImplementerId")]
diff --git a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/MessageInfo.cs b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/MessageInfo.cs
index 400aec0..31acc0a 100644
--- a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/MessageInfo.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/MessageInfo.cs
@@ -2,13 +2,15 @@
 using PrecastConcretePlantContracts.ViewModels;
 using PrecastConcretePlantDataModels;
 using System.ComponentModel.DataAnnotations;
-
+using System.Runtime.Serialization;
 
 namespace PrecastConcretePlantDatabaseImplement
 {
+    [DataContract]
     public class MessageInfo : IMessageInfoModel
     {
         [Key]
+        [DataMember]
         public string MessageId { get; private set; } = string.Empty;
 
         public int? ClientId { get; private set; }
@@ -49,6 +51,6 @@ namespace PrecastConcretePlantDatabaseImplement
             SenderName = SenderName,
             DateDelivery = DateDelivery,
         };
-
+        public int Id => throw new NotImplementedException();
     }
 }
diff --git a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Order.cs b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Order.cs
index c75447b..27534cc 100644
--- a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Order.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Order.cs
@@ -3,35 +3,42 @@ using PrecastConcretePlantContracts.ViewModels;
 using PrecastConcretePlantDataModels.Enums;
 using PrecastConcretePlantDataModels.Models;
 using System.ComponentModel.DataAnnotations;
-
+using System.Runtime.Serialization;
 
 namespace PrecastConcretePlantDatabaseImplement.Models
 {
+    [DataContract]
     public class Order : IOrderModel
     {
         public int Id { get; private set; }
 
         [Required]
+        [DataMember]
         public int ReinforcedId { get; private set; }
 
         [Required]
-
+        [DataMember]
         public int ClientId { get; private set; }
 
         public int? ImplementerId { get; private set; }
 
         [Required]
+        [DataMember]
         public int Count { get; private set; }
 
         [Required]
+        [DataMember]
         public double Sum { get; private set; }
 
         [Required]
+        [DataMember]
         public OrderStatus Status { get; private set; }
 
         [Required]
+        [DataMember]
         public DateTime DateCreate { get; private set; }
 
+        [DataMember]
         public DateTime? DateImplement { get; private set; }
 
         public Reinforced Reinforced { get; private set; }
diff --git a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/PrecastConcretePlantDatabaseImplement.csproj b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/PrecastConcretePlantDatabaseImplement.csproj
index 77c9e22..2ceed05 100644
--- a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/PrecastConcretePlantDatabaseImplement.csproj
+++ b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/PrecastConcretePlantDatabaseImplement.csproj
@@ -20,4 +20,8 @@
     <ProjectReference Include="..\PrecastConcretePlantDataModels\PrecastConcretePlantDataModels.csproj" />
   </ItemGroup>
 
+  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
+    <Exec Command="copy /Y &quot;$(targetDir)*.dll&quot; &quot;$(solutionDir)ImplementationExtensions\*.dll&quot;" />
+  </Target>
+
 </Project>
diff --git a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Reinforced.cs b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Reinforced.cs
index fd15074..0beb820 100644
--- a/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Reinforced.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantDatabaseImplement/Reinforced.cs
@@ -3,20 +3,25 @@ using PrecastConcretePlantContracts.ViewModels;
 using PrecastConcretePlantDataModels.Models;
 using System.ComponentModel.DataAnnotations.Schema;
 using System.ComponentModel.DataAnnotations;
-using System.Xml.Linq;
+using System.Runtime.Serialization;
 
 namespace PrecastConcretePlantDatabaseImplement.Models
 {
+    [DataContract]
     public class Reinforced : IReinforcedModel
     {
+        [DataMember]
         public int Id { get; set; }
         [Required]
+        [DataMember]
         public string ReinforcedName { get; set; } = string.Empty;
         [Required]
+        [DataMember]
         public double Price { get; set; }
         private Dictionary<int, (IComponentModel, int)>? _reinforcedComponents = null;
 
         [NotMapped]
+        [DataMember]
         public Dictionary<int, (IComponentModel, int)> ReinforcedComponents
         {
             get
diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/BackUpInfo.cs b/PrecastConcretePlant/PrecastConcretePlantFileImplement/BackUpInfo.cs
new file mode 100644
index 0000000..5e22a51
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/BackUpInfo.cs
@@ -0,0 +1,33 @@
+using PrecastConcretePlantContracts.StoragesContract;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PrecastConcretePlantFileImplement
+{
+    public class BackUpInfo : IBackUpInfo
+    {
+        public List<T>? GetList<T>() where T : class, new()
+        {
+            var source = DataFileSingleton.GetInstance();
+            return (List<T>?)source.GetType().GetProperties()
+                .FirstOrDefault(x => x.PropertyType.IsGenericType && x.PropertyType.GetGenericArguments()[0] == typeof(T))
+                ?.GetValue(source);
+        }
+        public Type? GetTypeByModelInterface(string modelInterfaceName)
+        {
+            var assembly = typeof(BackUpInfo).Assembly;
+            var types = assembly.GetTypes();
+            foreach (var type in types)
+            {
+                if (type.IsClass && type.GetInterface(modelInterfaceName) != null)
+                {
+                    return type;
+                }
+            }
+            return null;
+        }
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/Client.cs b/PrecastConcretePlant/PrecastConcretePlantFileImplement/Client.cs
index 435b04f..52a2272 100644
--- a/PrecastConcretePlant/PrecastConcretePlantFileImplement/Client.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/Client.cs
@@ -4,20 +4,23 @@ using PrecastConcretePlantDataModels;
 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 PrecastConcretePlantFileImplement
 {
+    [DataContract]
     public class Client : IClientModel
     {
+        [DataMember]
         public string ClientFIO { get; private set; } = string.Empty;
-
+        [DataMember]
         public string Email { get; private set; } = string.Empty;
-
+        [DataMember]
         public string Password { get; private set; } = string.Empty;
-
+        [DataMember]
         public int Id { get; private set; }
 
         public static Client? Create(ClientBindingModel model)
diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/Component.cs b/PrecastConcretePlant/PrecastConcretePlantFileImplement/Component.cs
index 00c37c8..ba6a7ab 100644
--- a/PrecastConcretePlant/PrecastConcretePlantFileImplement/Component.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/Component.cs
@@ -1,16 +1,21 @@
 using PrecastConcretePlantContracts.BindingModels;
 using PrecastConcretePlantContracts.ViewModels;
 using PrecastConcretePlantDataModels.Models;
+using System.Runtime.Serialization;
 using System.Xml.Linq;
 
 
 
 namespace PrecastConcretePlantFileImplement.Models
 {
+    [DataContract]
     public class Component : IComponentModel
     {
+        [DataMember]
         public int Id { get; private set; }
+        [DataMember]
         public string ComponentName { get; private set; } = string.Empty;
+        [DataMember]
         public double Cost { get; set; }
         public static Component? Create(ComponentBindingModel? model)
         {
diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/FileImplementationExtension.cs b/PrecastConcretePlant/PrecastConcretePlantFileImplement/FileImplementationExtension.cs
new file mode 100644
index 0000000..02475e8
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/FileImplementationExtension.cs
@@ -0,0 +1,28 @@
+using PrecastConcretePlantContracts.DI;
+using PrecastConcretePlantContracts.StoragesContract;
+using PrecastConcretePlantFileImplement.Implements;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PrecastConcretePlantFileImplement
+{
+    public class FileImplementationExtension : IImplementationExtension
+    {
+        public int Priority => 1;
+
+        public void RegisterServices()
+        {
+            DependencyManager.Instance.RegisterType<IClientStorage, ClientStorage>();
+            DependencyManager.Instance.RegisterType<IComponentStorage, ComponentStorage>();
+            DependencyManager.Instance.RegisterType<IImplementerStorage, ImplementerStorage>();
+            DependencyManager.Instance.RegisterType<IMessageInfoStorage, MessageInfoStorage>();
+            DependencyManager.Instance.RegisterType<IOrderStorage, OrderStorage>();
+            DependencyManager.Instance.RegisterType<IReinforcedStorage, ReinforcedStorage>();
+            DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
+        }
+
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/Implementer.cs b/PrecastConcretePlant/PrecastConcretePlantFileImplement/Implementer.cs
index f3a906f..f145309 100644
--- a/PrecastConcretePlant/PrecastConcretePlantFileImplement/Implementer.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/Implementer.cs
@@ -1,20 +1,23 @@
 using PrecastConcretePlantContracts.BindingModels;
 using PrecastConcretePlantContracts.ViewModels;
 using PrecastConcretePlantDataModels;
+using System.Runtime.Serialization;
 using System.Xml.Linq;
 
 namespace PrecastConcretePlantFileImplement
 {
+    [DataContract]
     public class Implementer : IImplementerModel
     {
+        [DataMember]
         public int Id { get; private set; }
-
+        [DataMember]
         public string ImplementerFIO { get; private set; } = string.Empty;
-
+        [DataMember]
         public string Password { get; private set; } = string.Empty;
-
+        [DataMember]
         public int WorkExperience { get; private set; }
-
+        [DataMember]
         public int Qualification { get; private set; }
 
         public static Implementer? Create(XElement element)
diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfo.cs b/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfo.cs
index 42725c0..30dac56 100644
--- a/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfo.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfo.cs
@@ -1,22 +1,25 @@
 using PrecastConcretePlantContracts.BindingModels;
 using PrecastConcretePlantContracts.ViewModels;
 using PrecastConcretePlantDataModels;
+using System.Runtime.Serialization;
 using System.Xml.Linq;
 
 namespace PrecastConcretePlantFileImplement
 {
+    [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 static MessageInfo? Create(MessageInfoBindingModel model)
diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/Order.cs b/PrecastConcretePlant/PrecastConcretePlantFileImplement/Order.cs
index 022ed61..63597f0 100644
--- a/PrecastConcretePlant/PrecastConcretePlantFileImplement/Order.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/Order.cs
@@ -2,29 +2,32 @@
 using PrecastConcretePlantContracts.ViewModels;
 using PrecastConcretePlantDataModels.Enums;
 using PrecastConcretePlantDataModels.Models;
+using System.Runtime.Serialization;
 using System.Xml.Linq;
 
 
 namespace PrecastConcretePlantFileImplement.Models
 {
+    [DataContract]
     public class Order : IOrderModel
     {
+        [DataMember]
         public int Id { get; private set; }
-
+        [DataMember]
         public int ReinforcedId { get; private set; }
-
+        [DataMember]
         public int ClientId { get; set; }
-
+        [DataMember]
         public int? ImplementerId { get; set; }
-
+        [DataMember]
         public int Count { get; private set; }
-
+        [DataMember]
         public double Sum { get; private set; }
-
+        [DataMember]
         public OrderStatus Status { get; private set; }
-
+        [DataMember]
         public DateTime DateCreate { get; private set; }
-
+        [DataMember]
         public DateTime? DateImplement { get; private set; }
 
         public static Order? Create(OrderBindingModel? model)
diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/PrecastConcretePlantFileImplement.csproj b/PrecastConcretePlant/PrecastConcretePlantFileImplement/PrecastConcretePlantFileImplement.csproj
index 3b2c1a9..2b63e73 100644
--- a/PrecastConcretePlant/PrecastConcretePlantFileImplement/PrecastConcretePlantFileImplement.csproj
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/PrecastConcretePlantFileImplement.csproj
@@ -11,4 +11,8 @@
     <ProjectReference Include="..\PrecastConcretePlantDataModels\PrecastConcretePlantDataModels.csproj" />
   </ItemGroup>
 
+  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
+    <Exec Command="copy /Y &quot;$(targetDir)*.dll&quot; &quot;$(solutionDir)ImplementationExtensions\*.dll&quot;" />
+  </Target>
+
 </Project>
diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/Reinforced.cs b/PrecastConcretePlant/PrecastConcretePlantFileImplement/Reinforced.cs
index a710fb4..d3486b8 100644
--- a/PrecastConcretePlant/PrecastConcretePlantFileImplement/Reinforced.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/Reinforced.cs
@@ -1,17 +1,23 @@
 using PrecastConcretePlantContracts.BindingModels;
 using PrecastConcretePlantContracts.ViewModels;
 using PrecastConcretePlantDataModels.Models;
+using System.Runtime.Serialization;
 using System.Xml.Linq;
 
 namespace PrecastConcretePlantFileImplement.Models
 {
+    [DataContract]
     public class Reinforced : IReinforcedModel
     {
+        [DataMember]
         public int Id { get; private set; }
+        [DataMember]
         public string ReinforcedName { get; private set; } = string.Empty;
+        [DataMember]
         public double Price { get; private set; }
         public Dictionary<int, int> Components { get; private set; } = new();
         private Dictionary<int, (IComponentModel, int)>? _ReinforcedComponents = null;
+        [DataMember]
         public Dictionary<int, (IComponentModel, int)> ReinforcedComponents
         {
             get
diff --git a/PrecastConcretePlant/PrecastConcretePlantListImplement/BackUpInfo.cs b/PrecastConcretePlant/PrecastConcretePlantListImplement/BackUpInfo.cs
new file mode 100644
index 0000000..7840086
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantListImplement/BackUpInfo.cs
@@ -0,0 +1,17 @@
+using PrecastConcretePlantContracts.StoragesContract;
+
+namespace PrecastConcretePlantListImplement
+{
+    public class BackUpInfo : IBackUpInfo
+    {
+        public List<T>? GetList<T>() where T : class, new()
+        {
+            throw new NotImplementedException();
+        }
+
+        public Type? GetTypeByModelInterface(string modelInterfaceName)
+        {
+            throw new NotImplementedException();
+        }
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantListImplement/ListImplementationExtension.cs b/PrecastConcretePlant/PrecastConcretePlantListImplement/ListImplementationExtension.cs
new file mode 100644
index 0000000..7b85556
--- /dev/null
+++ b/PrecastConcretePlant/PrecastConcretePlantListImplement/ListImplementationExtension.cs
@@ -0,0 +1,23 @@
+using PrecastConcretePlantContracts.DI;
+using PrecastConcretePlantContracts.StoragesContract;
+using PrecastConcretePlantListImplement.Implements;
+
+namespace PrecastConcretePlantListImplement
+{
+    public class ListImplementationExtension : IImplementationExtension
+    {
+        public int Priority => 0;
+
+        public void RegisterServices()
+        {
+            DependencyManager.Instance.RegisterType<IClientStorage, ClientStorage>();
+            DependencyManager.Instance.RegisterType<IComponentStorage, ComponentStorage>();
+            DependencyManager.Instance.RegisterType<IImplementerStorage, ImplementerStorage>();
+            DependencyManager.Instance.RegisterType<IMessageInfoStorage, MessageInfoStorage>();
+            DependencyManager.Instance.RegisterType<IOrderStorage, OrderStorage>();
+            DependencyManager.Instance.RegisterType<IReinforcedStorage, ReinforcedStorage>();
+            DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
+        }
+
+    }
+}
diff --git a/PrecastConcretePlant/PrecastConcretePlantListImplement/MessageInfo.cs b/PrecastConcretePlant/PrecastConcretePlantListImplement/MessageInfo.cs
index 57f958e..c87b81a 100644
--- a/PrecastConcretePlant/PrecastConcretePlantListImplement/MessageInfo.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantListImplement/MessageInfo.cs
@@ -44,6 +44,6 @@ namespace PrecastConcretePlantListImplement
             SenderName = SenderName,
             DateDelivery = DateDelivery,
         };
-
+        public int Id => throw new NotImplementedException();
     }
 }
diff --git a/PrecastConcretePlant/PrecastConcretePlantListImplement/PrecastConcretePlantListImplement.csproj b/PrecastConcretePlant/PrecastConcretePlantListImplement/PrecastConcretePlantListImplement.csproj
index 3b2c1a9..2b63e73 100644
--- a/PrecastConcretePlant/PrecastConcretePlantListImplement/PrecastConcretePlantListImplement.csproj
+++ b/PrecastConcretePlant/PrecastConcretePlantListImplement/PrecastConcretePlantListImplement.csproj
@@ -11,4 +11,8 @@
     <ProjectReference Include="..\PrecastConcretePlantDataModels\PrecastConcretePlantDataModels.csproj" />
   </ItemGroup>
 
+  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
+    <Exec Command="copy /Y &quot;$(targetDir)*.dll&quot; &quot;$(solutionDir)ImplementationExtensions\*.dll&quot;" />
+  </Target>
+
 </Project>
-- 
2.25.1


From 0c90a67bda9fcbe24049e702d5aff17104efdf1d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9F=D0=B0=D0=B2=D0=B5=D0=BB=20=D0=9F=D1=83=D1=82=D0=B8?=
 =?UTF-8?q?=D0=BB=D0=B8=D0=BD?= <iputilin201@gmail.com>
Date: Sun, 7 May 2023 17:52:49 +0400
Subject: [PATCH 2/4] .

---
 .../PrecastConcretePlant/DataGridViewExtension.cs            | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/PrecastConcretePlant/PrecastConcretePlant/DataGridViewExtension.cs b/PrecastConcretePlant/PrecastConcretePlant/DataGridViewExtension.cs
index 0f857b4..2db1e34 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/DataGridViewExtension.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/DataGridViewExtension.cs
@@ -1,9 +1,4 @@
 using PrecastConcretePlantContracts.Attributes;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 
 namespace PrecastConcretePlantView
 {
-- 
2.25.1


From 7de04ad2af27bb43374039acc2f11b7d21912965 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9F=D0=B0=D0=B2=D0=B5=D0=BB=20=D0=9F=D1=83=D1=82=D0=B8?=
 =?UTF-8?q?=D0=BB=D0=B8=D0=BD?= <iputilin201@gmail.com>
Date: Sun, 7 May 2023 17:58:24 +0400
Subject: [PATCH 3/4] fix

---
 PrecastConcretePlant/PrecastConcretePlant/FormMain.cs         | 4 ++--
 .../PrecastConcretePlantFileImplement/MessageInfo.cs          | 2 ++
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/PrecastConcretePlant/PrecastConcretePlant/FormMain.cs b/PrecastConcretePlant/PrecastConcretePlant/FormMain.cs
index fcf7401..d490722 100644
--- a/PrecastConcretePlant/PrecastConcretePlant/FormMain.cs
+++ b/PrecastConcretePlant/PrecastConcretePlant/FormMain.cs
@@ -180,8 +180,8 @@ namespace PrecastConcretePlantView
 
         private void DoWorkToolStripMenuItem_Click(object sender, EventArgs e)
         {
-            _workProcess.DoWork((
-                Program.ServiceProvider?.GetService(typeof(IImplementerLogic)) as IImplementerLogic)!,
+            _workProcess.DoWork(
+                DependencyManager.Instance.Resolve<IImplementerLogic>(),
                 _orderLogic);
             MessageBox.Show("Процесс обработки запущен", "Сообщение",
             MessageBoxButtons.OK, MessageBoxIcon.Information);
diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfo.cs b/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfo.cs
index 30dac56..826931f 100644
--- a/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfo.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/MessageInfo.cs
@@ -74,5 +74,7 @@ namespace PrecastConcretePlantFileImplement
             new XAttribute("SenderName", SenderName),
             new XAttribute("DateDelivery", DateDelivery)
             );
+
+        public int Id => throw new NotImplementedException();
     }
 }
-- 
2.25.1


From 49837d47382f669eb8ac72f27a40fab695975569 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=D0=9F=D0=B0=D0=B2=D0=B5=D0=BB=20=D0=9F=D1=83=D1=82=D0=B8?=
 =?UTF-8?q?=D0=BB=D0=B8=D0=BD?= <iputilin201@gmail.com>
Date: Tue, 9 May 2023 12:43:35 +0400
Subject: [PATCH 4/4] fix

---
 PrecastConcretePlant/PrecastConcretePlantFileImplement/Order.cs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/PrecastConcretePlant/PrecastConcretePlantFileImplement/Order.cs b/PrecastConcretePlant/PrecastConcretePlantFileImplement/Order.cs
index 63597f0..982f36a 100644
--- a/PrecastConcretePlant/PrecastConcretePlantFileImplement/Order.cs
+++ b/PrecastConcretePlant/PrecastConcretePlantFileImplement/Order.cs
@@ -67,7 +67,7 @@ namespace PrecastConcretePlantFileImplement.Models
                 DateCreate = Convert.ToDateTime(element.Element("DateCreate")!.Value),
                 ImplementerId = Convert.ToInt32(element.Element("ImplementerId")!.Value),
                 DateImplement = string.IsNullOrEmpty(dateImplement) ? null : Convert.ToDateTime(dateImplement),
-            };
+            }; 
         }
         public void Update(OrderBindingModel? model)
         {
-- 
2.25.1