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/PlumbingRepair/PlumbingRepair/DataGridViewExtension.cs b/PlumbingRepair/PlumbingRepair/DataGridViewExtension.cs
new file mode 100644
index 0000000..4adb482
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepair/DataGridViewExtension.cs
@@ -0,0 +1,53 @@
+using PlumbingRepairContracts.Attributes;
+
+namespace PlumbingRepair
+{
+	public 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/PlumbingRepair/PlumbingRepair/FormClients.cs b/PlumbingRepair/PlumbingRepair/FormClients.cs
index e1ce341..b733869 100644
--- a/PlumbingRepair/PlumbingRepair/FormClients.cs
+++ b/PlumbingRepair/PlumbingRepair/FormClients.cs
@@ -22,14 +22,8 @@ namespace PlumbingRepair
         {
             try
             {
-                var list = _logic.ReadList(null);
-                if (list != null)
-                {
-                    dataGridView.DataSource = list;
-                    dataGridView.Columns["Id"].Visible = false;
-                    dataGridView.Columns["ClientFIO"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
-                }
-                _logger.LogInformation("Загрузка клиентов");
+				dataGridView.FillandConfigGrid(_logic.ReadList(null));
+				_logger.LogInformation("Загрузка клиентов");
             }
             catch (Exception ex)
             {
diff --git a/PlumbingRepair/PlumbingRepair/FormComponents.cs b/PlumbingRepair/PlumbingRepair/FormComponents.cs
index 685ca8d..b592821 100644
--- a/PlumbingRepair/PlumbingRepair/FormComponents.cs
+++ b/PlumbingRepair/PlumbingRepair/FormComponents.cs
@@ -1,6 +1,8 @@
 using Microsoft.Extensions.Logging;
 using PlumbingRepairContracts.BindingModels;
 using PlumbingRepairContracts.BusinessLogicsContracts;
+using PlumbingRepairContracts.DI;
+using System.Windows.Forms;
 
 namespace PlumbingRepair
 {
@@ -23,18 +25,10 @@ namespace PlumbingRepair
 
         private void LoadData()
         {
-            try
+			try
             {
-                var list = _logic.ReadList(null);
-
-                if (list != null)
-                {
-                    DataGridView.DataSource = list;
-                    DataGridView.Columns["Id"].Visible = false;
-                    DataGridView.Columns["ComponentName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
-                }
-
-                _logger.LogInformation("Загрузка компонентов");
+				DataGridView.FillandConfigGrid(_logic.ReadList(null));
+				_logger.LogInformation("Загрузка компонентов");
 
             }
             catch (Exception ex)
@@ -46,31 +40,24 @@ namespace PlumbingRepair
 
         private void AddButton_Click(object sender, EventArgs e)
         {
-            var service = Program.ServiceProvider?.GetService(typeof(FormComponent));
+			var form = DependencyManager.Instance.Resolve<FormComponent>();
 
-            if (service is FormComponent form)
+            if (form.ShowDialog() == DialogResult.OK)
             {
-                if (form.ShowDialog() == DialogResult.OK)
-                {
-                    LoadData();
-                }
+                LoadData();
             }
         }
         private void ChangeButton_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 DeleteButton_Click(object sender, EventArgs e)
diff --git a/PlumbingRepair/PlumbingRepair/FormImplementers.cs b/PlumbingRepair/PlumbingRepair/FormImplementers.cs
index cd29385..b2c47a1 100644
--- a/PlumbingRepair/PlumbingRepair/FormImplementers.cs
+++ b/PlumbingRepair/PlumbingRepair/FormImplementers.cs
@@ -1,6 +1,7 @@
 using Microsoft.Extensions.Logging;
 using PlumbingRepairContracts.BindingModels;
 using PlumbingRepairContracts.BusinessLogicsContracts;
+using PlumbingRepairContracts.DI;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
@@ -26,14 +27,10 @@ namespace PlumbingRepair
 
 		private void AddButton_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();
 			}
 		}
 
@@ -41,14 +38,11 @@ namespace PlumbingRepair
 		{
 			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();
 				}
 			}
 		}
@@ -98,14 +92,7 @@ namespace PlumbingRepair
 		{
 			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("Загрузка исполнителей");
 			}
diff --git a/PlumbingRepair/PlumbingRepair/FormMails.cs b/PlumbingRepair/PlumbingRepair/FormMails.cs
index cf60ca0..eb9fa9b 100644
--- a/PlumbingRepair/PlumbingRepair/FormMails.cs
+++ b/PlumbingRepair/PlumbingRepair/FormMails.cs
@@ -20,14 +20,7 @@ namespace PlumbingRepair
 		{
 			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/PlumbingRepair/PlumbingRepair/FormMain.Designer.cs b/PlumbingRepair/PlumbingRepair/FormMain.Designer.cs
index ed94cf7..5c1eff6 100644
--- a/PlumbingRepair/PlumbingRepair/FormMain.Designer.cs
+++ b/PlumbingRepair/PlumbingRepair/FormMain.Designer.cs
@@ -39,11 +39,12 @@
 			WorkComponentToolStripMenuItem = new ToolStripMenuItem();
 			OrdersToolStripMenuItem = new ToolStripMenuItem();
 			запускРаботToolStripMenuItem = new ToolStripMenuItem();
+			письмаToolStripMenuItem = new ToolStripMenuItem();
+			создатьБэкапToolStripMenuItem = new ToolStripMenuItem();
 			CreateOrderButton = new Button();
 			IssuedOrderButton = new Button();
 			UpdateListButton = new Button();
 			DataGridView = new DataGridView();
-			письмаToolStripMenuItem = new ToolStripMenuItem();
 			MenuStrip.SuspendLayout();
 			((System.ComponentModel.ISupportInitialize)DataGridView).BeginInit();
 			SuspendLayout();
@@ -51,7 +52,7 @@
 			// MenuStrip
 			// 
 			MenuStrip.ImageScalingSize = new Size(20, 20);
-			MenuStrip.Items.AddRange(new ToolStripItem[] { СправочникиToolStripMenuItem, отчетыToolStripMenuItem, запускРаботToolStripMenuItem, письмаToolStripMenuItem });
+			MenuStrip.Items.AddRange(new ToolStripItem[] { СправочникиToolStripMenuItem, отчетыToolStripMenuItem, запускРаботToolStripMenuItem, письмаToolStripMenuItem, создатьБэкапToolStripMenuItem });
 			MenuStrip.Location = new Point(0, 0);
 			MenuStrip.Name = "MenuStrip";
 			MenuStrip.Padding = new Padding(7, 3, 0, 3);
@@ -129,6 +130,20 @@
 			запускРаботToolStripMenuItem.Text = "Запуск работ";
 			запускРаботToolStripMenuItem.Click += запускРаботToolStripMenuItem_Click;
 			// 
+			// письмаToolStripMenuItem
+			// 
+			письмаToolStripMenuItem.Name = "письмаToolStripMenuItem";
+			письмаToolStripMenuItem.Size = new Size(77, 24);
+			письмаToolStripMenuItem.Text = "Письма";
+			письмаToolStripMenuItem.Click += письмаToolStripMenuItem_Click;
+			// 
+			// создатьБэкапToolStripMenuItem
+			// 
+			создатьБэкапToolStripMenuItem.Name = "создатьБэкапToolStripMenuItem";
+			создатьБэкапToolStripMenuItem.Size = new Size(122, 24);
+			создатьБэкапToolStripMenuItem.Text = "Создать бэкап";
+			создатьБэкапToolStripMenuItem.Click += создатьБэкапToolStripMenuItem_Click;
+			// 
 			// CreateOrderButton
 			// 
 			CreateOrderButton.Location = new Point(832, 37);
@@ -173,13 +188,6 @@
 			DataGridView.Size = new Size(825, 561);
 			DataGridView.TabIndex = 1;
 			// 
-			// письмаToolStripMenuItem
-			// 
-			письмаToolStripMenuItem.Name = "письмаToolStripMenuItem";
-			письмаToolStripMenuItem.Size = new Size(77, 24);
-			письмаToolStripMenuItem.Text = "Письма";
-			письмаToolStripMenuItem.Click += письмаToolStripMenuItem_Click;
-			// 
 			// FormMain
 			// 
 			AutoScaleDimensions = new SizeF(8F, 20F);
@@ -220,5 +228,6 @@
 		private ToolStripMenuItem запускРаботToolStripMenuItem;
 		private DataGridView DataGridView;
 		private ToolStripMenuItem письмаToolStripMenuItem;
+		private ToolStripMenuItem создатьБэкапToolStripMenuItem;
 	}
 }
\ No newline at end of file
diff --git a/PlumbingRepair/PlumbingRepair/FormMain.cs b/PlumbingRepair/PlumbingRepair/FormMain.cs
index b29d95d..7d7dd4f 100644
--- a/PlumbingRepair/PlumbingRepair/FormMain.cs
+++ b/PlumbingRepair/PlumbingRepair/FormMain.cs
@@ -1,9 +1,7 @@
 using Microsoft.Extensions.Logging;
-using PlumbingRepairBusinessLogic.BusinessLogic;
 using PlumbingRepairContracts.BindingModels;
 using PlumbingRepairContracts.BusinessLogicsContracts;
-using PlumbingRepairDataModels.Enums;
-using System.Windows.Forms;
+using PlumbingRepairContracts.DI;
 
 namespace PlumbingRepair
 {
@@ -14,13 +12,15 @@ namespace PlumbingRepair
 
 		private readonly IReportLogic _reportLogic;
 		private readonly IWorkProcess _workProcess;
-		public FormMain(ILogger<FormMain> logger, IWorkProcess workProcess, IOrderLogic orderLogic, IReportLogic reportLogic)
+		private readonly IBackUpLogic _backUpLogic;
+		public FormMain(ILogger<FormMain> logger, IBackUpLogic backUpLogic, IWorkProcess workProcess, IOrderLogic orderLogic, IReportLogic reportLogic)
 		{
 			InitializeComponent();
 			_logger = logger;
 			_orderLogic = orderLogic;
 			_reportLogic = reportLogic;
 			_workProcess = workProcess;
+			_backUpLogic = backUpLogic;
 		}
 
 		private void FormMain_Load(object sender, EventArgs e)
@@ -34,16 +34,7 @@ namespace PlumbingRepair
 
 			try
 			{
-				var list = _orderLogic.ReadList(null);
-
-				if (list != null)
-				{
-					DataGridView.DataSource = list;
-					DataGridView.Columns["WorkId"].Visible = false;
-					DataGridView.Columns["ClientId"].Visible = false;
-					DataGridView.Columns["ImplementerId"].Visible = false;
-				}
-
+				DataGridView.FillandConfigGrid(_orderLogic.ReadList(null));
 				_logger.LogInformation("Загрузка заказов");
 			}
 			catch (Exception ex)
@@ -55,41 +46,26 @@ namespace PlumbingRepair
 
 		private void КомпонентыToolStripMenuItem_Click(object sender, EventArgs e)
 		{
-			var service = Program.ServiceProvider?.GetService(typeof(FormComponents));
-
-			if (service is FormComponents form)
-			{
-				form.ShowDialog();
-			}
+			var form = DependencyManager.Instance.Resolve<FormComponents>();
+			form.ShowDialog();
 		}
 
 		private void ИзделияToolStripMenuItem_Click(object sender, EventArgs e)
 		{
-			var service = Program.ServiceProvider?.GetService(typeof(FormWorks));
-
-			if (service is FormWorks form)
-			{
-				form.ShowDialog();
-			}
+			var form = DependencyManager.Instance.Resolve<FormWorks>();
+			form.ShowDialog();
 		}
 		private void КлиентыToolStripMenuItem_Click(object sender, EventArgs e)
 		{
-			var service = Program.ServiceProvider?.GetService(typeof(FormClients));
-			if (service is FormClients form)
-			{
-				form.ShowDialog();
-			}
+			var form = DependencyManager.Instance.Resolve<FormClients>();
+			form.ShowDialog();
 		}
 
 		private void CreateOrderButton_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 IssuedOrderButton_Click(object sender, EventArgs e)
@@ -142,44 +118,55 @@ namespace PlumbingRepair
 
 		private void WorkComponentToolStripMenuItem_Click(object sender, EventArgs e)
 		{
-			var service = Program.ServiceProvider?.GetService(typeof(FormReportWorkComponents));
-			if (service is FormReportWorkComponents form)
-			{
-				form.ShowDialog();
-			}
+			var form = DependencyManager.Instance.Resolve<FormReportWorkComponents>();
+			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 запускРаботToolStripMenuItem_Click(object sender, EventArgs e)
 		{
-			_workProcess.DoWork((Program.ServiceProvider?.GetService(typeof(IImplementerLogic)) as IImplementerLogic)!, _orderLogic);
+			_workProcess.DoWork(DependencyManager.Instance.Resolve<IImplementerLogic>(), _orderLogic);
 			MessageBox.Show("Процесс обработки запущен", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
 		}
 
 		private void исполнителиToolStripMenuItem_Click(object sender, EventArgs e)
 		{
-			var service = Program.ServiceProvider?.GetService(typeof(FormImplementers));
-
-			if (service is FormImplementers form)
-			{
-				form.ShowDialog();
-			}
+			var form = DependencyManager.Instance.Resolve<FormImplementers>();
+			form.ShowDialog();
 		}
 
 		private void письмаToolStripMenuItem_Click(object sender, EventArgs e)
 		{
-			var service = Program.ServiceProvider?.GetService(typeof(FormMails));
-			if (service is FormMails form)
+			var form = DependencyManager.Instance.Resolve<FormMails>();
+			form.ShowDialog();
+		}
+
+		private void создатьБэкапToolStripMenuItem_Click(object sender, EventArgs e)
+		{
+			try
 			{
-				form.ShowDialog();
+				if (_backUpLogic != null)
+				{
+					var fbd = new FolderBrowserDialog();
+					if (fbd.ShowDialog() == DialogResult.OK)
+					{
+						_backUpLogic.CreateBackUp(new BackUpSaveBindingModel
+						{
+							FolderName = fbd.SelectedPath
+						});
+						MessageBox.Show("Бекап создан", "Сообщение",
+					   MessageBoxButtons.OK, MessageBoxIcon.Information);
+					}
+				}
+			}
+			catch (Exception ex)
+			{
+				MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
 			}
 		}
 	}
diff --git a/PlumbingRepair/PlumbingRepair/FormWork.cs b/PlumbingRepair/PlumbingRepair/FormWork.cs
index 2d1092c..b0ef724 100644
--- a/PlumbingRepair/PlumbingRepair/FormWork.cs
+++ b/PlumbingRepair/PlumbingRepair/FormWork.cs
@@ -4,6 +4,7 @@ using PlumbingRepairContracts.SearchModels;
 using PlumbingRepairDataModels.Models;
 using Microsoft.Extensions.Logging;
 using System.Windows.Forms;
+using PlumbingRepairContracts.DI;
 
 namespace PlumbingRepair
 {
@@ -77,31 +78,27 @@ namespace PlumbingRepair
         }
         private void AddButton_Click(object sender, EventArgs e)
         {
-            var service = Program.ServiceProvider?.GetService(typeof(FormWorkComponent));
-
-            if (service is FormWorkComponent form)
-            {
+			var form = DependencyManager.Instance.Resolve<FormWorkComponent>();
                 if (form.ShowDialog() == DialogResult.OK)
                 {
-                    if (form.ComponentModel == null)
-                    {
-                        return;
-                    }
-
-                    _logger.LogInformation("Добавление нового компонента: { ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count);
-
-                    if (_workComponents.ContainsKey(form.Id))
-                    {
-                        _workComponents[form.Id] = (form.ComponentModel, form.Count);
-                    }
-
-                    else
-                    {
-                        _workComponents.Add(form.Id, (form.ComponentModel, form.Count));
-                    }
-
-                    LoadData();
+                if (form.ComponentModel == null)
+                {
+                    return;
                 }
+
+                _logger.LogInformation("Добавление нового компонента: { ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count);
+
+                if (_workComponents.ContainsKey(form.Id))
+                {
+                    _workComponents[form.Id] = (form.ComponentModel, form.Count);
+                }
+
+                else
+                {
+                    _workComponents.Add(form.Id, (form.ComponentModel, form.Count));
+                }
+
+                LoadData();
             }
         }
 
@@ -109,25 +106,21 @@ namespace PlumbingRepair
         {
             if (DataGridView.SelectedRows.Count == 1)
             {
-                var service = Program.ServiceProvider?.GetService(typeof(FormWorkComponent));
+				var form = DependencyManager.Instance.Resolve<FormWorkComponent>();
+                int id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells[0].Value);
+                form.Id = id;
+                form.Count = _workComponents[id].Item2;
 
-                if (service is FormWorkComponent form)
+                if (form.ShowDialog() == DialogResult.OK)
                 {
-                    int id = Convert.ToInt32(DataGridView.SelectedRows[0].Cells[0].Value);
-                    form.Id = id;
-                    form.Count = _workComponents[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);
-                        _workComponents[form.Id] = (form.ComponentModel, form.Count);
-                        LoadData();
+                        return;
                     }
+
+                    _logger.LogInformation("Изменение компонента: { ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count);
+                    _workComponents[form.Id] = (form.ComponentModel, form.Count);
+                    LoadData();
                 }
             }
         }
diff --git a/PlumbingRepair/PlumbingRepair/FormWorks.cs b/PlumbingRepair/PlumbingRepair/FormWorks.cs
index 5cbebac..7fe3a49 100644
--- a/PlumbingRepair/PlumbingRepair/FormWorks.cs
+++ b/PlumbingRepair/PlumbingRepair/FormWorks.cs
@@ -1,6 +1,7 @@
 using Microsoft.Extensions.Logging;
 using PlumbingRepairContracts.BindingModels;
 using PlumbingRepairContracts.BusinessLogicsContracts;
+using PlumbingRepairContracts.DI;
 
 namespace PlumbingRepair
 {
@@ -25,17 +26,8 @@ namespace PlumbingRepair
         {
             try
             {
-                var list = _logic.ReadList(null);
-
-                if (list != null)
-                {
-                    DataGridView.DataSource = list;
-                    DataGridView.Columns["Id"].Visible = false;
-                    DataGridView.Columns["WorkName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
-                    DataGridView.Columns["WorkComponents"].Visible = false;
-                }
-
-                _logger.LogInformation("Загрузка изделий");
+				DataGridView.FillandConfigGrid(_logic.ReadList(null));
+				_logger.LogInformation("Загрузка изделий");
 
             }
             catch (Exception ex)
@@ -47,30 +39,21 @@ namespace PlumbingRepair
 
         private void AddButton_Click(object sender, EventArgs e)
         {
-            var service = Program.ServiceProvider?.GetService(typeof(FormWork));
-
-            if (service is FormWork form)
+			var form = DependencyManager.Instance.Resolve<FormWork>();
+            if (form.ShowDialog() == DialogResult.OK)
             {
-                if (form.ShowDialog() == DialogResult.OK)
-                {
-                    LoadData();
-                }
+                LoadData();
             }
         }
         private void ChangeButton_Click(object sender, EventArgs e)
         {
             if (DataGridView.SelectedRows.Count == 1)
             {
-                var service = Program.ServiceProvider?.GetService(typeof(FormWork));
-
-                if (service is FormWork form)
+				var form = DependencyManager.Instance.Resolve<FormWork>();
+                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/PlumbingRepair/PlumbingRepair/Program.cs b/PlumbingRepair/PlumbingRepair/Program.cs
index 115e323..57338d8 100644
--- a/PlumbingRepair/PlumbingRepair/Program.cs
+++ b/PlumbingRepair/PlumbingRepair/Program.cs
@@ -1,7 +1,4 @@
 using PlumbingRepairContracts.BusinessLogicsContracts;
-using PlumbingRepairContracts.StoragesContracts;
-using PlumbingRepairDatabaseImplement.Implements;
-using Microsoft.Extensions.DependencyInjection;
 using Microsoft.Extensions.Logging;
 using NLog.Extensions.Logging;
 using PlumbingRepairBusinessLogic.BusinessLogic;
@@ -9,28 +6,23 @@ using PlumbingRepairBusinessLogic.OfficePackage;
 using PlumbingRepairBusinessLogic.OfficePackage.Implements;
 using PlumbingRepairContracts.BindingModels;
 using PlumbingRepairBusinessLogic.MailWorker;
+using PlumbingRepairContracts.DI;
 
 namespace PlumbingRepair
 {
     internal static class Program
     {
-        private static ServiceProvider? _serviceProvider;
-        public static ServiceProvider? ServiceProvider => _serviceProvider;
-        /// <summary>
-        /// The main entry point for the application.
-        /// </summary>
         [STAThread]
         static void Main()
         {
             // To customize application configuration such as set high DPI settings or default font,
             // see https://aka.ms/applicationconfiguration.
             ApplicationConfiguration.Initialize();
-            var services = new ServiceCollection();
-            ConfigureServices(services);
-            _serviceProvider = services.BuildServiceProvider();
+			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,
@@ -45,51 +37,51 @@ namespace PlumbingRepair
 			}
 			catch (Exception ex)
 			{
-				var logger = _serviceProvider.GetService<ILogger>();
+				var logger = DependencyManager.Instance.Resolve<ILogger>();
 				logger?.LogError(ex, "Error");
 			}
-			Application.Run(_serviceProvider.GetRequiredService<FormMain>());
+			Application.Run(DependencyManager.Instance.Resolve<FormMain>());
         }
-        private static void ConfigureServices(ServiceCollection services)
-        {
-            services.AddLogging(option =>
+        private static void InitDependency()
+		{
+			DependencyManager.InitDependency();
+			DependencyManager.Instance.AddLogging(option =>
             {
                 option.SetMinimumLevel(LogLevel.Information);
                 option.AddNLog("nlog.config");
             });
-            services.AddTransient<IComponentStorage, ComponentStorage>();
-            services.AddTransient<IOrderStorage, OrderStorage>();
-            services.AddTransient<IWorkStorage, WorkStorage>();
-            services.AddTransient<IClientStorage, ClientStorage>();
-			services.AddTransient<IImplementerStorage, ImplementerStorage>();
-			services.AddTransient<IMessageInfoStorage, MessageInfoStorage>();
-			services.AddTransient<IComponentLogic, ComponentLogic>();
-            services.AddTransient<IOrderLogic, OrderLogic>();
-            services.AddTransient<IWorkLogic, WorkLogic>();
-            services.AddTransient<IClientLogic, ClientLogic>();
-            services.AddTransient<IReportLogic, ReportLogic>();
-			services.AddTransient<IImplementerLogic, ImplementerLogic>();
-			services.AddTransient<IMessageInfoLogic, MessageInfoLogic>();
-			services.AddTransient<IWorkProcess, WorkModeling>();
-			services.AddSingleton<AbstractMailWorker, MailKitWorker>();
-			services.AddTransient<AbstractSaveToExcel, SaveToExcel>();
-            services.AddTransient<AbstractSaveToWord, SaveToWord>();
-            services.AddTransient<AbstractSaveToPdf, SaveToPdf>();
-            services.AddTransient<FormMain>();
-            services.AddTransient<FormComponent>();
-            services.AddTransient<FormComponents>();
-            services.AddTransient<FormCreateOrder>();
-            services.AddTransient<FormWork>();
-            services.AddTransient<FormWorkComponent>();
-            services.AddTransient<FormWorks>();
-            services.AddTransient<FormReportWorkComponents>();
-            services.AddTransient<FormReportOrders>();
-            services.AddTransient<FormClients>();
-			services.AddTransient<FormImplementer>();
-			services.AddTransient<FormImplementers>();
-			services.AddTransient<FormMails>();
+
+			DependencyManager.Instance.RegisterType<IComponentLogic, ComponentLogic>();
+			DependencyManager.Instance.RegisterType<IOrderLogic, OrderLogic>();
+			DependencyManager.Instance.RegisterType<IWorkLogic, WorkLogic>();
+			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>();
+
+			DependencyManager.Instance.RegisterType<AbstractMailWorker, MailKitWorker>(true);
+
+			DependencyManager.Instance.RegisterType<AbstractSaveToExcel, SaveToExcel>();
+			DependencyManager.Instance.RegisterType<AbstractSaveToWord, SaveToWord>();
+			DependencyManager.Instance.RegisterType<AbstractSaveToPdf, SaveToPdf>();
+
+			DependencyManager.Instance.RegisterType<FormMain>();
+			DependencyManager.Instance.RegisterType<FormComponent>();
+			DependencyManager.Instance.RegisterType<FormComponents>();
+			DependencyManager.Instance.RegisterType<FormCreateOrder>();
+			DependencyManager.Instance.RegisterType<FormWork>();
+			DependencyManager.Instance.RegisterType<FormWorkComponent>();
+			DependencyManager.Instance.RegisterType<FormWorks>();
+			DependencyManager.Instance.RegisterType<FormReportWorkComponents>();
+			DependencyManager.Instance.RegisterType<FormReportOrders>();
+			DependencyManager.Instance.RegisterType<FormClients>();
+			DependencyManager.Instance.RegisterType<FormImplementers>();
+			DependencyManager.Instance.RegisterType<FormImplementer>();
+			DependencyManager.Instance.RegisterType<FormMails>();
 		}
 
-		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/PlumbingRepair/PlumbingRepairBusinessLogic/BusinessLogic/BackUpLogic.cs b/PlumbingRepair/PlumbingRepairBusinessLogic/BusinessLogic/BackUpLogic.cs
new file mode 100644
index 0000000..b2c440e
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairBusinessLogic/BusinessLogic/BackUpLogic.cs
@@ -0,0 +1,112 @@
+using Microsoft.Extensions.Logging;
+using PlumbingRepairContracts.BindingModels;
+using PlumbingRepairContracts.BusinessLogicsContracts;
+using PlumbingRepairContracts.StoragesContracts;
+using PlumbingRepairDataModels;
+using System.IO.Compression;
+using System.Reflection;
+using System.Runtime.Serialization.Json;
+
+namespace PlumbingRepairBusinessLogic.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(BackUpSaveBindingModel model)
+		{
+			if (_backUpInfo == null)
+			{
+				return;
+			}
+
+			try
+			{
+				_logger.LogDebug("Clear folder");
+				// зачистка папки и удаление старого архива
+				var dirInfo = new DirectoryInfo(model.FolderName);
+
+				if (dirInfo.Exists)
+				{
+					foreach (var file in dirInfo.GetFiles())
+					{
+						file.Delete();
+					}
+				}
+
+				_logger.LogDebug("Delete archive");
+				string fileName = $"{model.FolderName}.zip";
+
+				if (File.Exists(fileName))
+				{
+					File.Delete(fileName);
+				}
+
+				// берем метод для сохранения
+				_logger.LogDebug("Get assembly");
+				var typeIId = typeof(IId);
+				var assembly = typeIId.Assembly;
+
+				if (assembly == null)
+				{
+					throw new ArgumentNullException("Сборка не найдена", nameof(assembly));
+				}
+
+				var types = assembly.GetTypes();
+				var method = GetType().GetMethod("SaveToFile", BindingFlags.NonPublic | BindingFlags.Instance);
+				_logger.LogDebug("Find {count} types", types.Length);
+
+				foreach (var type in types)
+				{
+					if (type.IsInterface && type.GetInterface(typeIId.Name) != null)
+					{
+						var modelType = _backUpInfo.GetTypeByModelInterface(type.Name);
+
+						if (modelType == null)
+						{
+							throw new InvalidOperationException($"Не найден класс-модель для {type.Name}");
+						}
+
+						_logger.LogDebug("Call SaveToFile method for {name} type", type.Name);
+
+						method?.MakeGenericMethod(modelType).Invoke(this, new object[] { model.FolderName });
+					}
+				}
+
+				_logger.LogDebug("Create zip and remove folder");
+
+				ZipFile.CreateFromDirectory(model.FolderName, fileName);
+
+				dirInfo.Delete(true);
+			}
+			catch (Exception)
+			{
+				throw;
+			}
+		}
+
+		private void SaveToFile<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/PlumbingRepair/PlumbingRepairContracts/Attributes/ColumnAttribute.cs b/PlumbingRepair/PlumbingRepairContracts/Attributes/ColumnAttribute.cs
new file mode 100644
index 0000000..7fd70c3
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairContracts/Attributes/ColumnAttribute.cs
@@ -0,0 +1,20 @@
+namespace PlumbingRepairContracts.Attributes
+{
+	[AttributeUsage(AttributeTargets.Property)]
+	public class ColumnAttribute : Attribute
+	{
+		public ColumnAttribute(string title = "", bool visible = true, int width = 0, GridViewAutoSize gridViewAutoSize = GridViewAutoSize.None, bool isUseAutoSize = false)
+		{
+			Title = title;
+			Visible = visible;
+			Width = width;
+			GridViewAutoSize = gridViewAutoSize;
+			IsUseAutoSize = isUseAutoSize;
+		}
+		public string Title { get; private set; }
+		public bool Visible { get; private set; }
+		public int Width { get; private set; }
+		public GridViewAutoSize GridViewAutoSize { get; private set; }
+		public bool IsUseAutoSize { get; private set; }
+	}
+}
diff --git a/PlumbingRepair/PlumbingRepairContracts/Attributes/GridViewAutoSize.cs b/PlumbingRepair/PlumbingRepairContracts/Attributes/GridViewAutoSize.cs
new file mode 100644
index 0000000..af2d10f
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairContracts/Attributes/GridViewAutoSize.cs
@@ -0,0 +1,14 @@
+namespace PlumbingRepairContracts.Attributes
+{
+	public enum GridViewAutoSize
+	{
+		NotSet = 0,
+		None = 1,
+		ColumnHeader = 2,
+		AllCellsExceptHeader = 4,
+		AllCells = 6,
+		DisplayedCellsExceptHeader = 8,
+		DisplayedCells = 10,
+		Fill = 16
+	}
+}
diff --git a/PlumbingRepair/PlumbingRepairContracts/BindingModels/BackUpSaveBindingModel.cs b/PlumbingRepair/PlumbingRepairContracts/BindingModels/BackUpSaveBindingModel.cs
new file mode 100644
index 0000000..4bdb1a5
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairContracts/BindingModels/BackUpSaveBindingModel.cs
@@ -0,0 +1,7 @@
+namespace PlumbingRepairContracts.BindingModels
+{
+	public class BackUpSaveBindingModel
+	{
+		public string FolderName { get; set; } = string.Empty;
+	}
+}
\ No newline at end of file
diff --git a/PlumbingRepair/PlumbingRepairContracts/BindingModels/MessageInfoBindingModel.cs b/PlumbingRepair/PlumbingRepairContracts/BindingModels/MessageInfoBindingModel.cs
index 43a3ae7..8eca939 100644
--- a/PlumbingRepair/PlumbingRepairContracts/BindingModels/MessageInfoBindingModel.cs
+++ b/PlumbingRepair/PlumbingRepairContracts/BindingModels/MessageInfoBindingModel.cs
@@ -10,5 +10,7 @@ namespace PlumbingRepairContracts.BindingModels
 		public string Subject { get; set; } = string.Empty;
 		public string Body { get; set; } = string.Empty;
 		public DateTime DateDelivery { get; set; }
+
+		public int Id => throw new NotImplementedException();
 	}
 }
diff --git a/PlumbingRepair/PlumbingRepairContracts/BusinessLogicsContracts/IBackUpLogic.cs b/PlumbingRepair/PlumbingRepairContracts/BusinessLogicsContracts/IBackUpLogic.cs
new file mode 100644
index 0000000..c9d9730
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairContracts/BusinessLogicsContracts/IBackUpLogic.cs
@@ -0,0 +1,9 @@
+using PlumbingRepairContracts.BindingModels;
+
+namespace PlumbingRepairContracts.BusinessLogicsContracts
+{
+	public interface IBackUpLogic
+	{
+		void CreateBackUp(BackUpSaveBindingModel model);
+	}
+}
\ No newline at end of file
diff --git a/PlumbingRepair/PlumbingRepairContracts/DI/DependencyManager.cs b/PlumbingRepair/PlumbingRepairContracts/DI/DependencyManager.cs
new file mode 100644
index 0000000..af33b3b
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairContracts/DI/DependencyManager.cs
@@ -0,0 +1,38 @@
+using Microsoft.Extensions.Logging;
+
+namespace PlumbingRepairContracts.DI
+{
+	public class DependencyManager
+	{
+		private readonly IDependencyContainer _dependencyManager;
+		private static DependencyManager? _manager;
+		private static readonly object _locjObject = new();
+
+		private DependencyManager()
+		{
+			_dependencyManager = new ServiceDependencyContainer();
+		}
+
+		public static DependencyManager Instance { get { if (_manager == null) { lock (_locjObject) { _manager = new DependencyManager(); } } return _manager; } }
+
+		public static void InitDependency()
+		{
+			var ext = ServiceProviderLoader.GetImplementationExtensions();
+			if (ext == null)
+			{
+				throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей по модулям");
+			}
+
+			// регистрируем зависимости
+			ext.RegisterServices();
+		}
+
+		public void AddLogging(Action<ILoggingBuilder> configure) => _dependencyManager.AddLogging(configure);
+
+		public void RegisterType<T, U>(bool isSingle = false) where U : class, T where T : class => _dependencyManager.RegisterType<T, U>(isSingle);
+
+		public void RegisterType<T>(bool isSingle = false) where T : class => _dependencyManager.RegisterType<T>(isSingle);
+
+		public T Resolve<T>() => _dependencyManager.Resolve<T>();
+	}
+}
diff --git a/PlumbingRepair/PlumbingRepairContracts/DI/IDependencyContainer.cs b/PlumbingRepair/PlumbingRepairContracts/DI/IDependencyContainer.cs
new file mode 100644
index 0000000..dd41ab4
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairContracts/DI/IDependencyContainer.cs
@@ -0,0 +1,12 @@
+using Microsoft.Extensions.Logging;
+
+namespace PlumbingRepairContracts.DI
+{
+	public interface IDependencyContainer
+	{
+		void AddLogging(Action<ILoggingBuilder> configure);
+		void RegisterType<T, U>(bool isSingle) where U : class, T where T : class;
+		void RegisterType<T>(bool isSingle) where T : class;
+		T Resolve<T>();
+	}
+}
diff --git a/PlumbingRepair/PlumbingRepairContracts/DI/IImplementationExtension.cs b/PlumbingRepair/PlumbingRepairContracts/DI/IImplementationExtension.cs
new file mode 100644
index 0000000..5d1e472
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairContracts/DI/IImplementationExtension.cs
@@ -0,0 +1,8 @@
+namespace PlumbingRepairContracts.DI
+{
+	public interface IImplementationExtension
+	{
+		public int Priority { get; }
+		public void RegisterServices();
+	}
+}
diff --git a/PlumbingRepair/PlumbingRepairContracts/DI/ServiceDependencyContainer.cs b/PlumbingRepair/PlumbingRepairContracts/DI/ServiceDependencyContainer.cs
new file mode 100644
index 0000000..9585e2a
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairContracts/DI/ServiceDependencyContainer.cs
@@ -0,0 +1,59 @@
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+
+namespace PlumbingRepairContracts.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/PlumbingRepair/PlumbingRepairContracts/DI/ServiceProviderLoader.cs b/PlumbingRepair/PlumbingRepairContracts/DI/ServiceProviderLoader.cs
new file mode 100644
index 0000000..5439e2e
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairContracts/DI/ServiceProviderLoader.cs
@@ -0,0 +1,52 @@
+using System.Reflection;
+
+namespace PlumbingRepairContracts.DI
+{
+	public class ServiceProviderLoader
+	{
+		public static IImplementationExtension? GetImplementationExtensions()
+		{
+			IImplementationExtension? source = null;
+			var files = Directory.GetFiles(TryGetImplementationExtensionsFolder(), "*.dll", SearchOption.AllDirectories);
+
+			foreach (var file in files.Distinct())
+			{
+				Assembly asm = Assembly.LoadFrom(file);
+
+				foreach (var t in asm.GetExportedTypes())
+				{
+					if (t.IsClass && typeof(IImplementationExtension).IsAssignableFrom(t))
+					{
+						if (source == null)
+						{
+							source = (IImplementationExtension)Activator.CreateInstance(t)!;
+						}
+						else
+						{
+							var newSource = (IImplementationExtension)Activator.CreateInstance(t)!;
+
+							if (newSource.Priority > source.Priority)
+							{
+								source = newSource;
+							}
+						}
+					}
+				}
+			}
+
+			return source;
+		}
+
+		private static string TryGetImplementationExtensionsFolder()
+		{
+			var directory = new DirectoryInfo(Directory.GetCurrentDirectory());
+
+			while (directory != null && !directory.GetDirectories("ImplementationExtensions", SearchOption.AllDirectories).Any(x => x.Name == "ImplementationExtensions"))
+			{
+				directory = directory.Parent;
+			}
+
+			return $"{directory?.FullName}\\ImplementationExtensions";
+		}
+	}
+}
\ No newline at end of file
diff --git a/PlumbingRepair/PlumbingRepairContracts/DI/UnityDependencyContainer.cs b/PlumbingRepair/PlumbingRepairContracts/DI/UnityDependencyContainer.cs
new file mode 100644
index 0000000..4928909
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairContracts/DI/UnityDependencyContainer.cs
@@ -0,0 +1,38 @@
+using Microsoft.Extensions.Logging;
+using Unity.Microsoft.Logging;
+using Unity;
+
+namespace PlumbingRepairContracts.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/PlumbingRepair/PlumbingRepairContracts/PlumbingRepairContracts.csproj b/PlumbingRepair/PlumbingRepairContracts/PlumbingRepairContracts.csproj
index 5c96a30..703f115 100644
--- a/PlumbingRepair/PlumbingRepairContracts/PlumbingRepairContracts.csproj
+++ b/PlumbingRepair/PlumbingRepairContracts/PlumbingRepairContracts.csproj
@@ -6,6 +6,12 @@
     <Nullable>enable</Nullable>
   </PropertyGroup>
 
+  <ItemGroup>
+    <PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
+    <PackageReference Include="Unity" Version="5.11.10" />
+    <PackageReference Include="Unity.Microsoft.Logging" Version="5.11.1" />
+  </ItemGroup>
+
   <ItemGroup>
     <ProjectReference Include="..\PlumbingRepairDataModels\PlumbingRepairDataModels.csproj" />
   </ItemGroup>
diff --git a/PlumbingRepair/PlumbingRepairContracts/StoragesContracts/IBackUpInfo.cs b/PlumbingRepair/PlumbingRepairContracts/StoragesContracts/IBackUpInfo.cs
new file mode 100644
index 0000000..3067aa7
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairContracts/StoragesContracts/IBackUpInfo.cs
@@ -0,0 +1,8 @@
+namespace PlumbingRepairContracts.StoragesContracts
+{
+	public interface IBackUpInfo
+	{
+		List<T>? GetList<T>() where T : class, new();
+		Type? GetTypeByModelInterface(string modelInterfaceName);
+	}
+}
\ No newline at end of file
diff --git a/PlumbingRepair/PlumbingRepairContracts/ViewModels/ClientViewModel.cs b/PlumbingRepair/PlumbingRepairContracts/ViewModels/ClientViewModel.cs
index 84ccc44..0b776c1 100644
--- a/PlumbingRepair/PlumbingRepairContracts/ViewModels/ClientViewModel.cs
+++ b/PlumbingRepair/PlumbingRepairContracts/ViewModels/ClientViewModel.cs
@@ -1,16 +1,18 @@
-using PlumbingRepairDataModels.Models;
+using PlumbingRepairContracts.Attributes;
+using PlumbingRepairDataModels.Models;
 using System.ComponentModel;
 
 namespace PlumbingRepairContracts.ViewModels
 {
     public class ClientViewModel : IClientModel
     {
-        public int Id { get; set; }
-        [DisplayName("ФИО клиента")]
-        public string ClientFIO { get; set; } = string.Empty;
-        [DisplayName("Логин (эл. почта)")]
-        public string Email { get; set; } = string.Empty;
-        [DisplayName("Пароль")]
-        public string Password { get; set; } = string.Empty;
+		[Column(visible: false)]
+		public int Id { get; set; }
+		[Column("ФИО клиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
+		public string ClientFIO { get; set; } = string.Empty;
+		[Column("Логин (эл. почта)", width: 150)]
+		public string Email { get; set; } = string.Empty;
+		[Column("Пароль", width: 150)]
+		public string Password { get; set; } = string.Empty;
     }
 }
diff --git a/PlumbingRepair/PlumbingRepairContracts/ViewModels/ComponentViewModel.cs b/PlumbingRepair/PlumbingRepairContracts/ViewModels/ComponentViewModel.cs
index 611d741..c5acd64 100644
--- a/PlumbingRepair/PlumbingRepairContracts/ViewModels/ComponentViewModel.cs
+++ b/PlumbingRepair/PlumbingRepairContracts/ViewModels/ComponentViewModel.cs
@@ -1,14 +1,16 @@
-using PlumbingRepairDataModels.Models;
+using PlumbingRepairContracts.Attributes;
+using PlumbingRepairDataModels.Models;
 using System.ComponentModel;
 
 namespace PlumbingRepairContracts.ViewModels
 {
     public class ComponentViewModel : IComponentModel
     {
-        public int Id { get; set; }
-        [DisplayName("Название компонента")]
-        public string ComponentName { get; set; } = string.Empty;
-        [DisplayName("Цена")]
-        public double Cost { get; set; }
+		[Column(visible: false)]
+		public int Id { get; set; }
+		[Column("Название компонента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
+		public string ComponentName { get; set; } = string.Empty;
+		[Column("Цена", width: 80)]
+		public double Cost { get; set; }
     }
 }
diff --git a/PlumbingRepair/PlumbingRepairContracts/ViewModels/ImplementerViewModel.cs b/PlumbingRepair/PlumbingRepairContracts/ViewModels/ImplementerViewModel.cs
index 9632d3a..e601339 100644
--- a/PlumbingRepair/PlumbingRepairContracts/ViewModels/ImplementerViewModel.cs
+++ b/PlumbingRepair/PlumbingRepairContracts/ViewModels/ImplementerViewModel.cs
@@ -1,22 +1,24 @@
-using PlumbingRepairDataModels.Models;
+using PlumbingRepairContracts.Attributes;
+using PlumbingRepairDataModels.Models;
 using System.ComponentModel;
 
 namespace PlumbingRepairContracts.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/PlumbingRepair/PlumbingRepairContracts/ViewModels/MessageInfoViewModel.cs b/PlumbingRepair/PlumbingRepairContracts/ViewModels/MessageInfoViewModel.cs
index 2149c73..283fe5b 100644
--- a/PlumbingRepair/PlumbingRepairContracts/ViewModels/MessageInfoViewModel.cs
+++ b/PlumbingRepair/PlumbingRepairContracts/ViewModels/MessageInfoViewModel.cs
@@ -1,24 +1,28 @@
-using PlumbingRepairDataModels.Models;
+using PlumbingRepairContracts.Attributes;
+using PlumbingRepairDataModels.Models;
 using System.ComponentModel;
 
 namespace PlumbingRepairContracts.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();
 	}
 }
diff --git a/PlumbingRepair/PlumbingRepairContracts/ViewModels/OrderViewModel.cs b/PlumbingRepair/PlumbingRepairContracts/ViewModels/OrderViewModel.cs
index 8aa9bc9..7e4b56a 100644
--- a/PlumbingRepair/PlumbingRepairContracts/ViewModels/OrderViewModel.cs
+++ b/PlumbingRepair/PlumbingRepairContracts/ViewModels/OrderViewModel.cs
@@ -1,4 +1,5 @@
-using PlumbingRepairDataModels.Enums;
+using PlumbingRepairContracts.Attributes;
+using PlumbingRepairDataModels.Enums;
 using PlumbingRepairDataModels.Models;
 using System.ComponentModel;
 
@@ -6,26 +7,29 @@ namespace PlumbingRepairContracts.ViewModels
 {
     public class OrderViewModel : IOrderModel
     {
-        [DisplayName("Номер")]
-        public int Id { get; set; }
-        public int WorkId { get; set; }
-		[DisplayName("Название изделия")]
-        public string WorkName { get; set; } = string.Empty;
-        public int ClientId { get; set; }
-        [DisplayName("Клиент")]
-        public string ClientFIO { get; set; } = string.Empty;
+		[Column("Номер", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
+		public int Id { get; set; }
+		[Column(visible: false)]
+		public int WorkId { get; set; }
+		[Column("Название изделия", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
+		public string WorkName { get; set; } = string.Empty;
+		[Column(visible: false)]
+		public int ClientId { get; set; }
+		[Column("ФИО клиента", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
+		public string ClientFIO { get; set; } = string.Empty;
+		[Column(visible: false)]
 		public int? ImplementerId { get; set; }
-		[DisplayName("Исполнитель")]
+		[Column("ФИО исполнителя", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
 		public string ImplementerFIO { get; set; } = string.Empty;
-		[DisplayName("Количество")]
-        public int Count { get; set; }
-        [DisplayName("Сумма")]
-        public double Sum { get; set; }
-        [DisplayName("Статус")]
-        public OrderStatus Status { get; set; } = OrderStatus.Неизвестен;
-        [DisplayName("Дата создания")]
-        public DateTime DateCreate { get; set; } = DateTime.Now;
-        [DisplayName("Дата выполнения")]
-        public DateTime? DateImplement { get; set; }
+		[Column("Количество", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
+		public int Count { get; set; }
+		[Column("Сумма", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
+		public double Sum { get; set; }
+		[Column("Статус", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
+		public OrderStatus Status { get; set; } = OrderStatus.Неизвестен;
+		[Column("Дата создания", width: 130)]
+		public DateTime DateCreate { get; set; } = DateTime.Now;
+		[Column("Дата выполнения", width: 130)]
+		public DateTime? DateImplement { get; set; }
     }
 }
diff --git a/PlumbingRepair/PlumbingRepairContracts/ViewModels/WorkViewModel.cs b/PlumbingRepair/PlumbingRepairContracts/ViewModels/WorkViewModel.cs
index 10404e2..ca496c6 100644
--- a/PlumbingRepair/PlumbingRepairContracts/ViewModels/WorkViewModel.cs
+++ b/PlumbingRepair/PlumbingRepairContracts/ViewModels/WorkViewModel.cs
@@ -1,15 +1,18 @@
-using PlumbingRepairDataModels.Models;
+using PlumbingRepairContracts.Attributes;
+using PlumbingRepairDataModels.Models;
 using System.ComponentModel;
 
 namespace PlumbingRepairContracts.ViewModels
 {
     public class WorkViewModel : IWorkModel
     {
-        public int Id { get; set; }
-        [DisplayName("Название изделия")]
-        public string WorkName { get; set; } = string.Empty;
-        [DisplayName("Цена")]
-        public double Price { get; set; }
-        public Dictionary<int, (IComponentModel, int)> WorkComponents { get; set; } = new();
+		[Column(visible: false)]
+		public int Id { get; set; }
+		[Column("Название изделия", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
+		public string WorkName { get; set; } = string.Empty;
+		[Column("Цена", width: 100)]
+		public double Price { get; set; }
+		[Column(visible: false)]
+		public Dictionary<int, (IComponentModel, int)> WorkComponents { get; set; } = new();
     }
 }
diff --git a/PlumbingRepair/PlumbingRepairDataModels/Models/IMessageInfoModel.cs b/PlumbingRepair/PlumbingRepairDataModels/Models/IMessageInfoModel.cs
index 45fb925..0fd7a64 100644
--- a/PlumbingRepair/PlumbingRepairDataModels/Models/IMessageInfoModel.cs
+++ b/PlumbingRepair/PlumbingRepairDataModels/Models/IMessageInfoModel.cs
@@ -1,6 +1,6 @@
 namespace PlumbingRepairDataModels.Models
 {
-	public interface IMessageInfoModel
+	public interface IMessageInfoModel : IId
 	{
 		string MessageId { get; }
 		int? ClientId { get; }
diff --git a/PlumbingRepair/PlumbingRepairDatabaseImplement/DatabaseImplementationExtension.cs b/PlumbingRepair/PlumbingRepairDatabaseImplement/DatabaseImplementationExtension.cs
new file mode 100644
index 0000000..cf24629
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairDatabaseImplement/DatabaseImplementationExtension.cs
@@ -0,0 +1,22 @@
+using PlumbingRepairContracts.DI;
+using PlumbingRepairContracts.StoragesContracts;
+using PlumbingRepairDatabaseImplement.Implements;
+
+namespace PlumbingRepairDatabaseImplement
+{
+	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<IWorkStorage, WorkStorage>();
+			DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
+		}
+	}
+}
diff --git a/PlumbingRepair/PlumbingRepairDatabaseImplement/Implements/BackUpInfo.cs b/PlumbingRepair/PlumbingRepairDatabaseImplement/Implements/BackUpInfo.cs
new file mode 100644
index 0000000..1984174
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairDatabaseImplement/Implements/BackUpInfo.cs
@@ -0,0 +1,29 @@
+using PlumbingRepairContracts.StoragesContracts;
+
+namespace PlumbingRepairDatabaseImplement.Implements
+{
+	public class BackUpInfo : IBackUpInfo
+	{
+		public List<T>? GetList<T>() where T : class, new()
+		{
+			using var context = new PlumbingRepairDataBase();
+			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/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Client.cs b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Client.cs
index c96c681..931a1d0 100644
--- a/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Client.cs
+++ b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Client.cs
@@ -3,18 +3,24 @@ using PlumbingRepairContracts.ViewModels;
 using PlumbingRepairDataModels.Models;
 using System.ComponentModel.DataAnnotations.Schema;
 using System.ComponentModel.DataAnnotations;
+using System.Runtime.Serialization;
 
 namespace PlumbingRepairDatabaseImplement.Models
 {
-    public class Client : IClientModel
+	[DataContract]
+	public class Client : IClientModel
     {
-        public int Id { get; set; }
+		[DataMember]
+		public int Id { get; set; }
         [Required]
-        public string ClientFIO { get; set; } = string.Empty;
+		[DataMember]
+		public string ClientFIO { get; set; } = string.Empty;
         [Required]
-        public string Email { get; set; } = string.Empty;
+		[DataMember]
+		public string Email { get; set; } = string.Empty;
         [Required]
-        public string Password { get; set; } = string.Empty;
+		[DataMember]
+		public string Password { get; set; } = string.Empty;
         [ForeignKey("ClientId")]
         public virtual List<Order> Orders { get; set; } = new();
 		[ForeignKey("ClientId")]
diff --git a/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Component.cs b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Component.cs
index 0e7f43c..2276f91 100644
--- a/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Component.cs
+++ b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Component.cs
@@ -3,18 +3,23 @@ using PlumbingRepairContracts.ViewModels;
 using PlumbingRepairDataModels.Models;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
 
 namespace PlumbingRepairDatabaseImplement.Models
 {
-    public class Component : IComponentModel
+	[DataContract]
+	public class Component : IComponentModel
     {
-        public int Id { get; private set; }
+		[DataMember]
+		public int Id { get; private set; }
 
         [Required]
-        public string ComponentName { get; private set; } = string.Empty;
+		[DataMember]
+		public string ComponentName { get; private set; } = string.Empty;
 
         [Required]
-        public double Cost { get; set; }
+		[DataMember]
+		public double Cost { get; set; }
 
         [ForeignKey("ComponentId")]
         public virtual List<WorkComponent> WorkComponents { get; set; } = new();
diff --git a/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Implementer.cs b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Implementer.cs
index 593de71..78991c7 100644
--- a/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Implementer.cs
+++ b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Implementer.cs
@@ -3,23 +3,30 @@ using PlumbingRepairContracts.ViewModels;
 using PlumbingRepairDataModels.Models;
 using System.ComponentModel.DataAnnotations.Schema;
 using System.ComponentModel.DataAnnotations;
+using System.Runtime.Serialization;
 
 namespace PlumbingRepairDatabaseImplement.Models
 {
+	[DataContract]
 	public class Implementer : IImplementerModel
 	{
+		[DataMember]
 		public int Id { get; set; }
 
 		[Required]
+		[DataMember]
 		public string ImplementerFIO { get; set; } = string.Empty;
 
 		[Required]
+		[DataMember]
 		public string Password { get; set; } = string.Empty;
 
 		[Required]
+		[DataMember]
 		public int WorkExperience { get; set; }
 
 		[Required]
+		[DataMember]
 		public int Qualification { get; set; }
 
 		[ForeignKey("ImplementerId")]
diff --git a/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Message.cs b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Message.cs
index 733c013..8d8585f 100644
--- a/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Message.cs
+++ b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Message.cs
@@ -2,17 +2,25 @@
 using PlumbingRepairContracts.ViewModels;
 using PlumbingRepairDataModels.Models;
 using System.ComponentModel.DataAnnotations;
+using System.Runtime.Serialization;
 
 namespace PlumbingRepairDatabaseImplement.Models
 {
+	[DataContract]
 	public class Message : IMessageInfoModel
 	{
 		[Key]
+		[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.SpecifyKind(DateTime.Now, DateTimeKind.Utc);
+		[DataMember]
 		public string Subject { get; private set; } = string.Empty;
+		[DataMember]
 		public string Body { get; private set; } = string.Empty;
 
 		public virtual Client? Client { get; set; }
@@ -43,5 +51,7 @@ namespace PlumbingRepairDatabaseImplement.Models
 			SenderName = SenderName,
 			DateDelivery = DateDelivery
 		};
+
+		public int Id => throw new NotImplementedException();
 	}
 }
diff --git a/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Order.cs b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Order.cs
index 722be22..aab2404 100644
--- a/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Order.cs
+++ b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Order.cs
@@ -3,33 +3,41 @@ using PlumbingRepairContracts.ViewModels;
 using PlumbingRepairDataModels.Enums;
 using PlumbingRepairDataModels.Models;
 using System.ComponentModel.DataAnnotations;
+using System.Runtime.Serialization;
 
 namespace PlumbingRepairDatabaseImplement.Models
 {
-    public class Order : IOrderModel
+	[DataContract]
+	public class Order : IOrderModel
     {
-        public int Id { get; private set; }
-
-        public int WorkId { get; private set; }
-
-        public string WorkName { get; private set; } = string.Empty;
+		[DataMember]
+		public int Id { get; private set; }
+		[DataMember]
+		public int WorkId { get; private set; }
+		[DataMember]
+		public string WorkName { get; private set; } = string.Empty;
         [Required]
-        public int ClientId { get; private set; }
-
+		[DataMember]
+		public int ClientId { get; private set; }
+		[DataMember]
 		public int? ImplementerId { get; set; }
 		[Required]
+		[DataMember]
 		public int Count { get; private set; }
 
         [Required]
-        public double Sum { get; private set; }
+		[DataMember]
+		public double Sum { get; private set; }
 
         [Required]
-        public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен;
+		[DataMember]
+		public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен;
 
         [Required]
-        public DateTime DateCreate { get; private set; } = DateTime.Now;
-
-        public DateTime? DateImplement { get; private set; }
+		[DataMember]
+		public DateTime DateCreate { get; private set; } = DateTime.Now;
+		[DataMember]
+		public DateTime? DateImplement { get; private set; }
 
         public virtual Work Work { get; set; }
         public virtual Client Client { get; set; }
diff --git a/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Work.cs b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Work.cs
index 88f76c9..a0880ca 100644
--- a/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Work.cs
+++ b/PlumbingRepair/PlumbingRepairDatabaseImplement/Models/Work.cs
@@ -3,23 +3,29 @@ using PlumbingRepairContracts.ViewModels;
 using PlumbingRepairDataModels.Models;
 using System.ComponentModel.DataAnnotations;
 using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
 
 namespace PlumbingRepairDatabaseImplement.Models
 {
-    public class Work : IWorkModel
+	[DataContract]
+	public class Work : IWorkModel
     {
-        public int Id { get; set; }
+		[DataMember]
+		public int Id { get; set; }
 
         [Required]
-        public string WorkName { get; set; } = string.Empty;
+		[DataMember]
+		public string WorkName { get; set; } = string.Empty;
 
         [Required]
-        public double Price { get; set; }
+		[DataMember]
+		public double Price { get; set; }
 
         private Dictionary<int, (IComponentModel, int)>? _workComponents = null;
 
         [NotMapped]
-        public Dictionary<int, (IComponentModel, int)> WorkComponents
+		[DataMember]
+		public Dictionary<int, (IComponentModel, int)> WorkComponents
         {
             get
             {
diff --git a/PlumbingRepair/PlumbingRepairDatabaseImplement/PlumbingRepairDatabaseImplement.csproj b/PlumbingRepair/PlumbingRepairDatabaseImplement/PlumbingRepairDatabaseImplement.csproj
index ee7581f..00e20bf 100644
--- a/PlumbingRepair/PlumbingRepairDatabaseImplement/PlumbingRepairDatabaseImplement.csproj
+++ b/PlumbingRepair/PlumbingRepairDatabaseImplement/PlumbingRepairDatabaseImplement.csproj
@@ -20,4 +20,8 @@
     <ProjectReference Include="..\PlumbingRepairDataModels\PlumbingRepairDataModels.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/PlumbingRepair/PlumbingRepairListImplement/Implements/BackUpInfo.cs b/PlumbingRepair/PlumbingRepairListImplement/Implements/BackUpInfo.cs
new file mode 100644
index 0000000..27fa0f1
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairListImplement/Implements/BackUpInfo.cs
@@ -0,0 +1,17 @@
+using PlumbingRepairContracts.StoragesContracts;
+
+namespace PlumbingRepairListImplement.Implements
+{
+	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/PlumbingRepair/PlumbingRepairListImplement/ListImplementationExtension.cs b/PlumbingRepair/PlumbingRepairListImplement/ListImplementationExtension.cs
new file mode 100644
index 0000000..78f212e
--- /dev/null
+++ b/PlumbingRepair/PlumbingRepairListImplement/ListImplementationExtension.cs
@@ -0,0 +1,22 @@
+using PlumbingRepairContracts.DI;
+using PlumbingRepairContracts.StoragesContracts;
+using PlumbingRepairListImplement.Implements;
+
+namespace PlumbingRepairListImplement
+{
+	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<IWorkStorage, WorkStorage>();
+			DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
+		}
+	}
+}
diff --git a/PlumbingRepair/PlumbingRepairListImplement/Models/Message.cs b/PlumbingRepair/PlumbingRepairListImplement/Models/Message.cs
index 159249b..57b749c 100644
--- a/PlumbingRepair/PlumbingRepairListImplement/Models/Message.cs
+++ b/PlumbingRepair/PlumbingRepairListImplement/Models/Message.cs
@@ -44,5 +44,7 @@ namespace PlumbingRepairListImplement.Models
 			ClientId = ClientId,
 			MessageId = MessageId
 		};
+
+		public int Id => throw new NotImplementedException();
 	}
 }
diff --git a/PlumbingRepair/PlumbingRepairListImplement/PlumbingRepairListImplement.csproj b/PlumbingRepair/PlumbingRepairListImplement/PlumbingRepairListImplement.csproj
index 05f8377..e4c7070 100644
--- a/PlumbingRepair/PlumbingRepairListImplement/PlumbingRepairListImplement.csproj
+++ b/PlumbingRepair/PlumbingRepairListImplement/PlumbingRepairListImplement.csproj
@@ -11,4 +11,8 @@
     <ProjectReference Include="..\PlumbingRepairDataModels\PlumbingRepairDataModels.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/PlumbingRepair/PlumpingRepairFileImplement/FileImplementationExtension.cs b/PlumbingRepair/PlumpingRepairFileImplement/FileImplementationExtension.cs
new file mode 100644
index 0000000..1edd43d
--- /dev/null
+++ b/PlumbingRepair/PlumpingRepairFileImplement/FileImplementationExtension.cs
@@ -0,0 +1,22 @@
+using PlumbingRepairContracts.DI;
+using PlumbingRepairContracts.StoragesContracts;
+using PlumbingRepairFileImplement.Implements;
+
+namespace PlumbingRepairFileImplement
+{
+	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<IWorkStorage, WorkStorage>();
+			DependencyManager.Instance.RegisterType<IBackUpInfo, BackUpInfo>();
+		}
+	}
+}
diff --git a/PlumbingRepair/PlumpingRepairFileImplement/Implements/BackUpInfo.cs b/PlumbingRepair/PlumpingRepairFileImplement/Implements/BackUpInfo.cs
new file mode 100644
index 0000000..bbc285a
--- /dev/null
+++ b/PlumbingRepair/PlumpingRepairFileImplement/Implements/BackUpInfo.cs
@@ -0,0 +1,32 @@
+using PlumbingRepairContracts.StoragesContracts;
+
+namespace PlumbingRepairFileImplement.Implements
+{
+	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/PlumbingRepair/PlumpingRepairFileImplement/Models/Client.cs b/PlumbingRepair/PlumpingRepairFileImplement/Models/Client.cs
index 64c154c..5c7d51e 100644
--- a/PlumbingRepair/PlumpingRepairFileImplement/Models/Client.cs
+++ b/PlumbingRepair/PlumpingRepairFileImplement/Models/Client.cs
@@ -1,16 +1,22 @@
 using PlumbingRepairContracts.BindingModels;
 using PlumbingRepairContracts.ViewModels;
 using PlumbingRepairDataModels.Models;
+using System.Runtime.Serialization;
 using System.Xml.Linq;
 
 namespace PlumbingRepairFileImplement.Models
 {
-    public class Client : IClientModel
+	[DataContract]
+	public class Client : IClientModel
     {
-        public int Id { get; private set; }
-        public string ClientFIO { get; private set; } = string.Empty;
-        public string Email { get; private set; } = string.Empty;
-        public string Password { get; private set; } = string.Empty;
+		[DataMember]
+		public int Id { get; private set; }
+		[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;
         public static Client? Create(ClientBindingModel? model)
         {
             if (model == null)
diff --git a/PlumbingRepair/PlumpingRepairFileImplement/Models/Component.cs b/PlumbingRepair/PlumpingRepairFileImplement/Models/Component.cs
index a9b833e..244e793 100644
--- a/PlumbingRepair/PlumpingRepairFileImplement/Models/Component.cs
+++ b/PlumbingRepair/PlumpingRepairFileImplement/Models/Component.cs
@@ -1,15 +1,20 @@
 using PlumbingRepairContracts.BindingModels;
 using PlumbingRepairContracts.ViewModels;
 using PlumbingRepairDataModels.Models;
+using System.Runtime.Serialization;
 using System.Xml.Linq;
 
 namespace PlumbingRepairFileImplement.Models
 {
-    public class Component : IComponentModel
+	[DataContract]
+	public class Component : IComponentModel
     {
-        public int Id { get; private set; }
-        public string ComponentName { get; private set; } = string.Empty;
-        public double Cost { get; set; }
+		[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/PlumbingRepair/PlumpingRepairFileImplement/Models/Implementer.cs b/PlumbingRepair/PlumpingRepairFileImplement/Models/Implementer.cs
index 8644896..71f04ba 100644
--- a/PlumbingRepair/PlumpingRepairFileImplement/Models/Implementer.cs
+++ b/PlumbingRepair/PlumpingRepairFileImplement/Models/Implementer.cs
@@ -1,20 +1,23 @@
 using PlumbingRepairContracts.BindingModels;
 using PlumbingRepairContracts.ViewModels;
 using PlumbingRepairDataModels.Models;
+using System.Runtime.Serialization;
 using System.Xml.Linq;
 
 namespace PlumbingRepairFileImplement.Models
 {
+	[DataContract]
 	public class Implementer : IImplementerModel
 	{
+		[DataMember]
 		public string ImplementerFIO { get; set; } = string.Empty;
-
+		[DataMember]
 		public string Password { get; set; } = string.Empty;
-
+		[DataMember]
 		public int WorkExperience { get; set; }
-
+		[DataMember]
 		public int Qualification { get; set; }
-
+		[DataMember]
 		public int Id { get; set; }
 
 		public static Implementer? Create(ImplementerBindingModel? model)
diff --git a/PlumbingRepair/PlumpingRepairFileImplement/Models/Message.cs b/PlumbingRepair/PlumpingRepairFileImplement/Models/Message.cs
index faf91da..9388fc0 100644
--- a/PlumbingRepair/PlumpingRepairFileImplement/Models/Message.cs
+++ b/PlumbingRepair/PlumpingRepairFileImplement/Models/Message.cs
@@ -1,22 +1,25 @@
 using PlumbingRepairContracts.BindingModels;
 using PlumbingRepairContracts.ViewModels;
 using PlumbingRepairDataModels.Models;
+using System.Runtime.Serialization;
 using System.Xml.Linq;
 
 namespace PlumbingRepairFileImplement.Models
 {
+	[DataContract]
 	public class Message : 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 Message? Create(MessageInfoBindingModel model)
@@ -71,5 +74,7 @@ namespace PlumbingRepairFileImplement.Models
 			new XAttribute("SenderName", SenderName),
 			new XAttribute("DateDelivery", DateDelivery.ToString())
 			);
+
+		public int Id => throw new NotImplementedException();
 	}
 }
diff --git a/PlumbingRepair/PlumpingRepairFileImplement/Models/Order.cs b/PlumbingRepair/PlumpingRepairFileImplement/Models/Order.cs
index 49e261f..ec330d1 100644
--- a/PlumbingRepair/PlumpingRepairFileImplement/Models/Order.cs
+++ b/PlumbingRepair/PlumpingRepairFileImplement/Models/Order.cs
@@ -2,22 +2,34 @@
 using PlumbingRepairContracts.ViewModels;
 using PlumbingRepairDataModels.Enums;
 using PlumbingRepairDataModels.Models;
+using System.Runtime.Serialization;
 using System.Xml.Linq;
 
 namespace PlumbingRepairFileImplement.Models
 {
-    public class Order : IOrderModel
+	[DataContract]
+	public class Order : IOrderModel
     {
-        public int Id { get; private set; }
-        public int WorkId { get; private set; }
-        public int ClientId { get; private set; }
+		[DataMember]
+		public int Id { get; private set; }
+		[DataMember]
+		public int WorkId { get; private set; }
+		[DataMember]
+		public int ClientId { get; private set; }
+		[DataMember]
 		public int? ImplementerId { get; private set; }
+		[DataMember]
 		public string WorkName { get; private set; } = string.Empty;
-        public int Count { get; private set; }
-        public double Sum { get; private set; }
-        public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен;
-        public DateTime DateCreate { get; private set; } = DateTime.Now;
-        public DateTime? DateImplement { get; private set; }
+		[DataMember]
+		public int Count { get; private set; }
+		[DataMember]
+		public double Sum { get; private set; }
+		[DataMember]
+		public OrderStatus Status { get; private set; } = OrderStatus.Неизвестен;
+		[DataMember]
+		public DateTime DateCreate { get; private set; } = DateTime.Now;
+		[DataMember]
+		public DateTime? DateImplement { get; private set; }
 
         public static Order? Create(OrderBindingModel model)
         {
@@ -47,7 +59,9 @@ namespace PlumbingRepairFileImplement.Models
                 return null;
             }
 
-            var order = new Order()
+			DateTime.TryParse(element.Element("DateImplement")!.Value, out DateTime dateImpl);
+
+			var order = new Order()
             {
                 Id = Convert.ToInt32(element.Attribute("Id")!.Value),
                 WorkId = Convert.ToInt32(element.Element("WorkId")!.Value),
@@ -56,12 +70,10 @@ namespace PlumbingRepairFileImplement.Models
 				ImplementerId = Convert.ToInt32(element.Element("ImplementerId")!.Value),
 				Count = Convert.ToInt32(element.Element("Count")!.Value),
                 Sum = Convert.ToDouble(element.Element("Sum")!.Value),
-                Status = (OrderStatus)Enum.Parse(typeof(OrderStatus), element.Element("Status")!.Value),
-                DateCreate = DateTime.ParseExact(element.Element("DateCreate")!.Value, "G", null)
-            };
-
-            DateTime.TryParse(element.Element("DateImplement")!.Value, out DateTime dateImpl);
-            order.DateImplement = dateImpl;
+				Status = (OrderStatus)Convert.ToInt32(element.Element("Status")!.Value),
+				DateCreate = DateTime.ParseExact(element.Element("DateCreate")!.Value, "G", null),
+				DateImplement = dateImpl
+			};
 
             return order;
         }
diff --git a/PlumbingRepair/PlumpingRepairFileImplement/Models/Work.cs b/PlumbingRepair/PlumpingRepairFileImplement/Models/Work.cs
index 8f24dd2..82c83ad 100644
--- a/PlumbingRepair/PlumpingRepairFileImplement/Models/Work.cs
+++ b/PlumbingRepair/PlumpingRepairFileImplement/Models/Work.cs
@@ -1,21 +1,26 @@
 using PlumbingRepairContracts.BindingModels;
 using PlumbingRepairContracts.ViewModels;
 using PlumbingRepairDataModels.Models;
+using System.Runtime.Serialization;
 using System.Xml.Linq;
 
 namespace PlumbingRepairFileImplement.Models
 {
-    public class Work : IWorkModel
+	[DataContract]
+	public class Work : IWorkModel
     {
-        public int Id { get; private set; }
-        public string WorkName { get; private set; } = string.Empty;
-        public double Price { get; private set; }
+		[DataMember]
+		public int Id { get; private set; }
+		[DataMember]
+		public string WorkName { get; private set; } = string.Empty;
+		[DataMember]
+		public double Price { get; private set; }
 
         public Dictionary<int, int> Components { get; private set; } = new();
 
         public Dictionary<int, (IComponentModel, int)> _workComponents = null;
-
-        public Dictionary<int, (IComponentModel, int)> WorkComponents
+		[DataMember]
+		public Dictionary<int, (IComponentModel, int)> WorkComponents
         {
             get
             {
diff --git a/PlumbingRepair/PlumpingRepairFileImplement/PlumbingRepairFileImplement.csproj b/PlumbingRepair/PlumpingRepairFileImplement/PlumbingRepairFileImplement.csproj
index 05f8377..e4c7070 100644
--- a/PlumbingRepair/PlumpingRepairFileImplement/PlumbingRepairFileImplement.csproj
+++ b/PlumbingRepair/PlumpingRepairFileImplement/PlumbingRepairFileImplement.csproj
@@ -11,4 +11,8 @@
     <ProjectReference Include="..\PlumbingRepairDataModels\PlumbingRepairDataModels.csproj" />
   </ItemGroup>
 
+  <Target Name="PostBuild" AfterTargets="PostBuildEvent">
+    <Exec Command="copy /Y &quot;$(TargetDir)*.dll&quot; &quot;$(SolutionDir)ImplementationExtensions\*.dll&quot;" />
+  </Target>
+
 </Project>