diff --git a/FurnitureAssembly/FurnitureAssembly/App.config b/FurnitureAssembly/FurnitureAssembly/App.config
index 37f0651..e835b00 100644
--- a/FurnitureAssembly/FurnitureAssembly/App.config
+++ b/FurnitureAssembly/FurnitureAssembly/App.config
@@ -5,7 +5,7 @@
-
-
+
+
\ No newline at end of file
diff --git a/FurnitureAssembly/FurnitureAssembly/ClientsForm.cs b/FurnitureAssembly/FurnitureAssembly/ClientsForm.cs
index af45a86..e5e98af 100644
--- a/FurnitureAssembly/FurnitureAssembly/ClientsForm.cs
+++ b/FurnitureAssembly/FurnitureAssembly/ClientsForm.cs
@@ -1,4 +1,5 @@
-using FurnitureAssemblyContracts.BindingModels;
+using FurnitureAssembly;
+using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyContracts.BusinessLogicsContracts;
using Microsoft.Extensions.Logging;
using System;
@@ -32,17 +33,7 @@ namespace FurnitureAssemblyView
{
try
{
- var list = _logic.ReadList(null);
- if (list != null)
- {
- dataGridView.DataSource = list;
- dataGridView.Columns["Id"].Visible = false;
- dataGridView.Columns["ClientFIO"].AutoSizeMode =
- DataGridViewAutoSizeColumnMode.Fill;
- dataGridView.Columns["Email"].AutoSizeMode =
- DataGridViewAutoSizeColumnMode.Fill;
- dataGridView.Columns["Password"].Visible = false;
- }
+ dataGridView.FillandConfigGrid(_logic.ReadList(null));
_logger.LogInformation("Загрузка клиентов");
}
catch (Exception ex)
diff --git a/FurnitureAssembly/FurnitureAssembly/ComponentsForm.cs b/FurnitureAssembly/FurnitureAssembly/ComponentsForm.cs
index 3d1ab9a..346d203 100644
--- a/FurnitureAssembly/FurnitureAssembly/ComponentsForm.cs
+++ b/FurnitureAssembly/FurnitureAssembly/ComponentsForm.cs
@@ -1,6 +1,7 @@
using FurnitureAssembly;
using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyContracts.BusinessLogicsContracts;
+using FurnitureAssemblyContracts.DI;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
@@ -33,13 +34,7 @@ namespace FurnitureAssemblyView
{
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)
@@ -52,13 +47,10 @@ namespace FurnitureAssemblyView
private void buttonAdd_Click(object sender, EventArgs e)
{
- var service = Program.ServiceProvider?.GetService(typeof(ComponentForm));
- if (service is ComponentForm form)
+ var form = DependencyManager.Instance.Resolve();
+ if (form.ShowDialog() == DialogResult.OK)
{
- if (form.ShowDialog() == DialogResult.OK)
- {
- LoadData();
- }
+ LoadData();
}
}
@@ -102,15 +94,11 @@ namespace FurnitureAssemblyView
{
if (dataGridView.SelectedRows.Count == 1)
{
- var service =
- Program.ServiceProvider?.GetService(typeof(ComponentForm));
- if (service is ComponentForm form)
+ var form = DependencyManager.Instance.Resolve();
+ 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/FurnitureAssembly/FurnitureAssembly/DataGridViewExtension.cs b/FurnitureAssembly/FurnitureAssembly/DataGridViewExtension.cs
new file mode 100644
index 0000000..6952f2e
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssembly/DataGridViewExtension.cs
@@ -0,0 +1,51 @@
+using FurnitureAssemblyContracts.Attributes;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssembly
+{
+ public static class DataGridViewExtension
+ {
+ public static void FillandConfigGrid(this DataGridView grid, List? data)
+ {
+ if (data == null)
+ {
+ return;
+ }
+ grid.DataSource = data;
+ var type = typeof(T);
+ var properties = type.GetProperties();
+ foreach (DataGridViewColumn column in grid.Columns)
+ {
+ var property = properties.FirstOrDefault(x => x.Name == column.Name);
+ if (property == null)
+ {
+ throw new InvalidOperationException($"В типе {type.Name} не найдено свойство с именем { column.Name }");
+ }
+ var attribute = property.GetCustomAttributes(typeof(ColumnAttribute), true)?.SingleOrDefault();
+ if (attribute == null)
+ {
+ throw new InvalidOperationException($"Не найден атрибут типа ColumnAttribute для свойства { property.Name }");
+ }
+ // ищем нужный нам атрибут
+ if (attribute is ColumnAttribute columnAttr)
+ {
+ column.HeaderText = columnAttr.Title;
+ column.Visible = columnAttr.Visible;
+ if (columnAttr.IsUseAutoSize)
+ {
+ column.AutoSizeMode =
+ (DataGridViewAutoSizeColumnMode)Enum.Parse(typeof(DataGridViewAutoSizeColumnMode), columnAttr.GridViewAutoSize.ToString());
+ }
+ else
+ {
+ column.Width = columnAttr.Width;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssembly/FormMail.cs b/FurnitureAssembly/FurnitureAssembly/FormMail.cs
index fd2afdb..5fe7996 100644
--- a/FurnitureAssembly/FurnitureAssembly/FormMail.cs
+++ b/FurnitureAssembly/FurnitureAssembly/FormMail.cs
@@ -20,14 +20,7 @@ namespace FurnitureAssembly
{
try
{
- var list = _logic.ReadList(null);
- if (list != null)
- {
- dataGridViewMail.DataSource = list;
- dataGridViewMail.Columns["ClientId"].Visible = false;
- dataGridViewMail.Columns["MessageId"].Visible = false;
- dataGridViewMail.Columns["Body"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
- }
+ dataGridViewMail.FillandConfigGrid(_logic.ReadList(null));
_logger.LogInformation("Загрузка писем");
}
catch (Exception ex)
diff --git a/FurnitureAssembly/FurnitureAssembly/FurnitureAssemblyView.csproj b/FurnitureAssembly/FurnitureAssembly/FurnitureAssemblyView.csproj
index 98ebae3..17b56b1 100644
--- a/FurnitureAssembly/FurnitureAssembly/FurnitureAssemblyView.csproj
+++ b/FurnitureAssembly/FurnitureAssembly/FurnitureAssemblyView.csproj
@@ -8,17 +8,14 @@
enable
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
diff --git a/FurnitureAssembly/FurnitureAssembly/FurnitureForm.cs b/FurnitureAssembly/FurnitureAssembly/FurnitureForm.cs
index db12f3c..d7108b3 100644
--- a/FurnitureAssembly/FurnitureAssembly/FurnitureForm.cs
+++ b/FurnitureAssembly/FurnitureAssembly/FurnitureForm.cs
@@ -13,6 +13,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
+using FurnitureAssemblyContracts.DI;
namespace FurnitureAssemblyView
{
@@ -85,35 +86,34 @@ namespace FurnitureAssemblyView
private void buttonAdd_Click(object sender, EventArgs e)
{
- var service = Program.ServiceProvider?.GetService(typeof(FurnitureComponentForm));
- if (service is FurnitureComponentForm form)
- {
- if (form.ShowDialog() == DialogResult.OK)
- {
- if (form.ComponentModel == null)
- {
- return;
- }
- _logger.LogInformation("Добавление нового компонента:{ ComponentName} - { Count}", form.ComponentModel.ComponentName, form.Count);
- if (_furnitureComponents.ContainsKey(form.Id))
- {
- _furnitureComponents[form.Id] = (form.ComponentModel, form.Count);
- }
- else
- {
- _furnitureComponents.Add(form.Id, (form.ComponentModel, form.Count));
- }
- LoadData();
- }
- }
+ var form = DependencyManager.Instance.Resolve();
+ if (form.ShowDialog() == DialogResult.OK)
+ {
+ if (form.ComponentModel == null)
+ {
+ return;
+ }
+ _logger.LogInformation("Добавление нового компонента: { ComponentName}- { Count}", form.ComponentModel.ComponentName, form.Count);
+ if (_furnitureComponents.ContainsKey(form.Id))
+ {
+ _furnitureComponents[form.Id] = (form.ComponentModel,
+ form.Count);
+ }
+ else
+ {
+ _furnitureComponents.Add(form.Id, (form.ComponentModel,
+ form.Count));
+ }
+ LoadData();
+ }
}
private void buttonChange_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
- var service = Program.ServiceProvider?.GetService(typeof(FurnitureComponentForm));
+ var service = DependencyManager.Instance.Resolve();
if (service is FurnitureComponentForm form)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells[0].Value);
diff --git a/FurnitureAssembly/FurnitureAssembly/FurnituresForm.cs b/FurnitureAssembly/FurnitureAssembly/FurnituresForm.cs
index e141d16..ceb9353 100644
--- a/FurnitureAssembly/FurnitureAssembly/FurnituresForm.cs
+++ b/FurnitureAssembly/FurnitureAssembly/FurnituresForm.cs
@@ -10,6 +10,7 @@ using System.Windows.Forms;
using FurnitureAssembly;
using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyContracts.BusinessLogicsContracts;
+using FurnitureAssemblyContracts.DI;
using FurnitureAssemblyView;
using Microsoft.Extensions.Logging;
@@ -31,15 +32,7 @@ namespace FurnitureAssemblyView
{
try
{
- var list = _logic.ReadList(null);
-
- if (list != null)
- {
- DataGridView.DataSource = list;
- DataGridView.Columns["Id"].Visible = false;
- DataGridView.Columns["FurnitureComponents"].Visible = false;
- DataGridView.Columns["FurnitureName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
- }
+ DataGridView.FillandConfigGrid(_logic.ReadList(null));
_logger.LogInformation("Загрузка компонентов");
@@ -53,30 +46,23 @@ namespace FurnitureAssemblyView
private void AddButton_Click(object sender, EventArgs e)
{
- var service = Program.ServiceProvider?.GetService(typeof(FurnitureForm));
+ var form = DependencyManager.Instance.Resolve();
- if (service is FurnitureForm 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(FurnitureForm));
+ var form = DependencyManager.Instance.Resolve();
- if (service is FurnitureForm form)
+ 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/FurnitureAssembly/FurnitureAssembly/ImplementersForm.cs b/FurnitureAssembly/FurnitureAssembly/ImplementersForm.cs
index 81af3be..89251fb 100644
--- a/FurnitureAssembly/FurnitureAssembly/ImplementersForm.cs
+++ b/FurnitureAssembly/FurnitureAssembly/ImplementersForm.cs
@@ -1,6 +1,7 @@
using FurnitureAssembly;
using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyContracts.BusinessLogicsContracts;
+using FurnitureAssemblyContracts.DI;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
@@ -33,15 +34,7 @@ namespace FurnitureAssemblyView
{
try
{
- var list = _logic.ReadList(null);
- if (list != null)
- {
- dataGridView.DataSource = list;
- dataGridView.Columns["Id"].Visible = false;
- dataGridView.Columns["ImplementerFIO"].AutoSizeMode =
- DataGridViewAutoSizeColumnMode.Fill;
- }
- _logger.LogInformation("Загрузка исполнителей");
+ dataGridView.FillandConfigGrid(_logic.ReadList(null));
}
catch (Exception ex)
{
@@ -53,13 +46,11 @@ namespace FurnitureAssemblyView
private void ButtonAdd_Click(object sender, EventArgs e)
{
- var service = Program.ServiceProvider?.GetService(typeof(ImplementerForm));
- if (service is ImplementerForm form)
+ var form = DependencyManager.Instance.Resolve();
+
+ if (form.ShowDialog() == DialogResult.OK)
{
- if (form.ShowDialog() == DialogResult.OK)
- {
- LoadData();
- }
+ LoadData();
}
}
@@ -67,16 +58,12 @@ namespace FurnitureAssemblyView
{
if (dataGridView.SelectedRows.Count == 1)
{
- var service =
- Program.ServiceProvider?.GetService(typeof(ImplementerForm));
- if (service is ImplementerForm form)
+ var form = DependencyManager.Instance.Resolve();
+
+ 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/FurnitureAssembly/FurnitureAssembly/MainForm.Designer.cs b/FurnitureAssembly/FurnitureAssembly/MainForm.Designer.cs
index 7029b7e..01ef100 100644
--- a/FurnitureAssembly/FurnitureAssembly/MainForm.Designer.cs
+++ b/FurnitureAssembly/FurnitureAssembly/MainForm.Designer.cs
@@ -46,6 +46,7 @@
this.списокЗаказовToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.запускРаботToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.mailToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.CreateBackUpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
buttonReady = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.dataGridView)).BeginInit();
this.menuStrip.SuspendLayout();
@@ -131,7 +132,8 @@
this.справочникиToolStripMenuItem,
this.отчетыToolStripMenuItem,
this.запускРаботToolStripMenuItem,
- this.mailToolStripMenuItem});
+ this.mailToolStripMenuItem,
+ this.CreateBackUpToolStripMenuItem});
this.menuStrip.Location = new System.Drawing.Point(0, 0);
this.menuStrip.Name = "menuStrip";
this.menuStrip.Padding = new System.Windows.Forms.Padding(4, 1, 0, 1);
@@ -216,6 +218,13 @@
this.запускРаботToolStripMenuItem.Text = " Запуск работ";
this.запускРаботToolStripMenuItem.Click += new System.EventHandler(this.doWorkToolStripMenuItem_Click);
//
+ // CreateBackUpToolStripMenuItem
+ //
+ this.CreateBackUpToolStripMenuItem.Name = "CreateBackUpToolStripMenuItem";
+ this.CreateBackUpToolStripMenuItem.Size = new System.Drawing.Size(97, 20);
+ this.CreateBackUpToolStripMenuItem.Text = "Создать Бэкап";
+ this.CreateBackUpToolStripMenuItem.Click += new System.EventHandler(this.CreateBackUpToolStripMenuItem_Click);
+ //
// MainForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
@@ -260,5 +269,6 @@
private ToolStripMenuItem исполнителиToolStripMenuItem;
private ToolStripMenuItem запускРаботToolStripMenuItem;
private ToolStripMenuItem mailToolStripMenuItem;
+ private ToolStripMenuItem CreateBackUpToolStripMenuItem;
}
}
\ No newline at end of file
diff --git a/FurnitureAssembly/FurnitureAssembly/MainForm.cs b/FurnitureAssembly/FurnitureAssembly/MainForm.cs
index 26f272e..b335dcc 100644
--- a/FurnitureAssembly/FurnitureAssembly/MainForm.cs
+++ b/FurnitureAssembly/FurnitureAssembly/MainForm.cs
@@ -12,6 +12,8 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
+using FurnitureAssemblyContracts.BusinessLogicsContarcts;
+using FurnitureAssemblyContracts.DI;
namespace FurnitureAssemblyView
{
@@ -21,14 +23,15 @@ namespace FurnitureAssemblyView
private readonly IOrderLogic _orderLogic;
private readonly IReportLogic _reportLogic;
private readonly IWorkProcess _workModeling;
-
- public MainForm(ILogger logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workModeling)
+ private readonly IBackUpLogic _backUpLogic;
+ public MainForm(ILogger logger, IOrderLogic orderLogic, IReportLogic reportLogic, IWorkProcess workModeling, IBackUpLogic backUpLogic)
{
InitializeComponent();
_logger = logger;
_orderLogic = orderLogic;
_reportLogic = reportLogic;
_workModeling = workModeling;
+ _backUpLogic = backUpLogic;
}
private void MainForm_Load(object sender, EventArgs e)
@@ -40,15 +43,7 @@ namespace FurnitureAssemblyView
_logger.LogInformation("Загрузка заказов");
try
{
- var list = _orderLogic.ReadList(null);
-
- if (list != null)
- {
- dataGridView.DataSource = list;
- dataGridView.Columns["FurnitureId"].Visible = false;
- dataGridView.Columns["ClientId"].Visible = false;
- dataGridView.Columns["ImplementerId"].Visible = false;
- }
+ dataGridView.FillandConfigGrid(_orderLogic.ReadList(null));
_logger.LogInformation("Загрузка заказов");
}
@@ -61,31 +56,24 @@ namespace FurnitureAssemblyView
private void компонентыToolStripMenuItem_Click(object sender, EventArgs e)
{
- var service = Program.ServiceProvider?.GetService(typeof(ComponentsForm));
- if (service is ComponentsForm form)
- {
- form.ShowDialog();
- }
+ var form = DependencyManager.Instance.Resolve();
+
+ form.ShowDialog();
}
private void изделияToolStripMenuItem_Click(object sender, EventArgs e)
{
- var service = Program.ServiceProvider?.GetService(typeof(FurnituresForm));
+ var form = DependencyManager.Instance.Resolve();
- if (service is FurnituresForm form)
- {
- form.ShowDialog();
- }
+ form.ShowDialog();
}
private void buttonCreate_Click(object sender, EventArgs e)
{
- var service = Program.ServiceProvider?.GetService(typeof(OrderForm));
- if (service is OrderForm form)
- {
- form.ShowDialog();
- LoadData();
- }
+ var form = DependencyManager.Instance.Resolve();
+
+ form.ShowDialog();
+ LoadData();
}
private void buttonToWork_Click(object sender, EventArgs e)
@@ -216,54 +204,64 @@ namespace FurnitureAssemblyView
private void FurnituresComponentsToolStripMenuItem_Click(object sender, EventArgs e)
{
- var service =
- Program.ServiceProvider?.GetService(typeof(ReportFurnitureComponentsForm));
- if (service is ReportFurnitureComponentsForm form)
- {
- form.ShowDialog();
- }
+ var form = DependencyManager.Instance.Resolve();
+
+ form.ShowDialog();
}
private void OrdersToolStripMenuItem_Click(object sender, EventArgs e)
{
- var service =
- Program.ServiceProvider?.GetService(typeof(ReportOrdersForm));
- if (service is ReportOrdersForm form)
- {
- form.ShowDialog();
- }
+ var form = DependencyManager.Instance.Resolve();
+
+ form.ShowDialog();
}
private void ClientsToolStripMenuItem_Click(object sender, EventArgs e)
{
- var service = Program.ServiceProvider?.GetService(typeof(ClientsForm));
- if (service is ClientsForm form)
- {
- form.ShowDialog();
- }
+ var form = DependencyManager.Instance.Resolve();
+ form.ShowDialog();
}
private void ImplementersToolStripMenuItem_Click(object sender, EventArgs e)
{
- var service = Program.ServiceProvider?.GetService(typeof(ImplementersForm));
- if (service is ImplementersForm form)
- {
- form.ShowDialog();
- }
+ var form = DependencyManager.Instance.Resolve();
+
+ form.ShowDialog();
}
private void doWorkToolStripMenuItem_Click(object sender, EventArgs e)
{
_workModeling.DoWork((
- Program.ServiceProvider?.GetService(typeof(IImplementerLogic)) as IImplementerLogic)!,
+ DependencyManager.Instance.Resolve() as IImplementerLogic)!,
_orderLogic);
}
private void mailToolStripMenuItem_Click(object sender, EventArgs e)
{
- var service = Program.ServiceProvider?.GetService(typeof(FormMail));
- if (service is FormMail form)
+ var form = DependencyManager.Instance.Resolve();
+ 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/FurnitureAssembly/FurnitureAssembly/Program.cs b/FurnitureAssembly/FurnitureAssembly/Program.cs
index bc8ddcc..e9a82f5 100644
--- a/FurnitureAssembly/FurnitureAssembly/Program.cs
+++ b/FurnitureAssembly/FurnitureAssembly/Program.cs
@@ -2,13 +2,13 @@ using FurnitureAssemblyBusinessLogic;
using FurnitureAssemblyBusinessLogic.OfficePackage.Implements;
using FurnitureAssemblyBusinessLogic.OfficePackage;
using FurnitureAssemblyContracts.BusinessLogicsContarcts;
-using FurnitureAssemblyContracts.StoragesContracts;
-using FurnitureAssemblyDatabaseImplement.Implements;
-using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NLog.Extensions.Logging;
using FurnitureAssemblyBusinessLogic.MailWorker;
using FurnitureAssemblyContracts.BindingModels;
+using FurnitureAssemblyContracts.DI;
+using FurnitureAssemblyContracts.StoragesContracts;
+using FurnitureAssemblyDatabaseImplement.Implements;
using FurnitureAssemblyContracts.BusinessLogicsContracts;
using FurnitureAssemblyBusinessLogic.BusinessLogics;
using FurnitureAssemblyView;
@@ -17,8 +17,6 @@ namespace FurnitureAssembly
{
internal static class Program
{
- private static ServiceProvider? _serviceProvider;
- public static ServiceProvider? ServiceProvider => _serviceProvider;
///
/// The main entry point for the application.
///
@@ -28,13 +26,10 @@ namespace FurnitureAssembly
// 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();
+ var mailSender = DependencyManager.Instance.Resolve();
mailSender?.MailConfig(new MailConfigBindingModel
{
MailLogin =
@@ -57,57 +52,60 @@ namespace FurnitureAssembly
}
catch (Exception ex)
{
- var logger = _serviceProvider.GetService();
+ var logger = DependencyManager.Instance.Resolve();
logger?.LogError(ex, " ");
}
- Application.Run(_serviceProvider.GetRequiredService());
+ Application.Run(DependencyManager.Instance.Resolve());
}
- 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();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
- services.AddSingleton();
+ DependencyManager.Instance.RegisterType(true);
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
- services.AddTransient();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
}
- private static void MailCheck(object obj) => ServiceProvider?.GetService()?.MailCheck();
+ private static void MailCheck(object obj) => DependencyManager.Instance.Resolve()?.MailCheck();
}
}
\ No newline at end of file
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/BusinessLogics/BackUpLogic.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/BusinessLogics/BackUpLogic.cs
new file mode 100644
index 0000000..ef5ed08
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/BusinessLogics/BackUpLogic.cs
@@ -0,0 +1,97 @@
+using FurnitureAssemblyContracts.BindingModels;
+using FurnitureAssemblyContracts.BusinessLogicsContarcts;
+using FurnitureAssemblyContracts.StoragesContracts;
+using FurnitureAssemblyDataModels;
+using Microsoft.Extensions.Logging;
+using System.IO.Compression;
+using System.Reflection;
+using System.Runtime.Serialization.Json;
+
+namespace FurnitureAssemblyBusinessLogic
+{
+ public class BackUpLogic : IBackUpLogic
+ {
+ private readonly ILogger _logger;
+ private readonly IBackUpInfo _backUpInfo;
+ public BackUpLogic(ILogger logger, IBackUpInfo backUpInfo)
+ {
+ _logger = logger;
+ _backUpInfo = backUpInfo;
+ }
+ public void CreateBackUp(BackUpSaveBinidngModel model)
+ {
+ if (_backUpInfo == null)
+ {
+ return;
+ }
+ try
+ {
+ _logger.LogDebug("Clear folder");
+ // зачистка папки и удаление старого архива
+ var dirInfo = new DirectoryInfo(model.FolderName);
+ if (dirInfo.Exists)
+ {
+ foreach (var file in dirInfo.GetFiles())
+ {
+ file.Delete();
+ }
+ }
+ _logger.LogDebug("Delete archive");
+ string fileName = $"{model.FolderName}.zip";
+ if (File.Exists(fileName))
+ {
+ File.Delete(fileName);
+ }
+ // берем метод для сохранения
+ _logger.LogDebug("Get assembly");
+ var typeIId = typeof(IId);
+ var assembly = typeIId.Assembly;
+ if (assembly == null)
+ {
+ throw new ArgumentNullException("Сборка не найдена",
+ nameof(assembly));
+ }
+ var types = assembly.GetTypes();
+ var method = GetType().GetMethod("SaveToFile", BindingFlags.NonPublic | BindingFlags.Instance);
+ _logger.LogDebug("Find {count} types", types.Length);
+ foreach (var type in types)
+ {
+ if (type.IsInterface && type.GetInterface(typeIId.Name) != null)
+ {
+ var modelType = _backUpInfo.GetTypeByModelInterface(type.Name);
+ if (modelType == null)
+ {
+ throw new InvalidOperationException($"Не найден класс - модель для { type.Name }");
+ }
+ _logger.LogDebug("Call SaveToFile method for {name} type", type.Name);
+ // вызываем метод на выполнение
+ method?.MakeGenericMethod(modelType).Invoke(this, new
+ object[] { model.FolderName });
+ }
+ }
+ _logger.LogDebug("Create zip and remove folder");
+ // архивируем
+ ZipFile.CreateFromDirectory(model.FolderName, fileName);
+ // удаляем папку
+ dirInfo.Delete(true);
+ }
+ catch (Exception)
+ {
+ throw;
+ }
+ }
+ private void SaveToFile(string folderName) where T : class, new()
+ {
+ var records = _backUpInfo.GetList();
+ if (records == null)
+ {
+ _logger.LogWarning("{type} type get null list", typeof(T).Name);
+ return;
+ }
+ var jsonFormatter = new DataContractJsonSerializer(typeof(List));
+ using var fs = new FileStream(string.Format("{0}/{1}.json",
+ folderName, typeof(T).Name), FileMode.OpenOrCreate);
+ jsonFormatter.WriteObject(fs, records);
+ }
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/BusinessLogics/MessageInfoLogic.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/BusinessLogics/MessageInfoLogic.cs
index b800ec7..1425e6c 100644
--- a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/BusinessLogics/MessageInfoLogic.cs
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/BusinessLogics/MessageInfoLogic.cs
@@ -11,18 +11,15 @@ namespace FurnitureAssemblyBusinessLogic
{
private readonly ILogger _logger;
private readonly IMessageInfoStorage _messageInfoStorage;
- private readonly IClientStorage _clientStorage;
- public MessageInfoLogic(ILogger logger, IMessageInfoStorage messageInfoStorage, IClientStorage clientStorage)
+ public MessageInfoLogic(ILogger logger, IMessageInfoStorage messageInfoStorage)
{
_logger = logger;
_messageInfoStorage = messageInfoStorage;
- _clientStorage = clientStorage;
- }
+ }
public bool Create(MessageInfoBindingModel model)
- {
- CheckModel(model);
+ {
if (_messageInfoStorage.Insert(model) == null)
{
_logger.LogWarning("Insert operation failed");
@@ -43,46 +40,5 @@ namespace FurnitureAssemblyBusinessLogic
_logger.LogInformation("ReadList. Count:{Count}", list.Count);
return list;
}
- private void CheckModel(MessageInfoBindingModel model, bool withParams = true)
- {
- if (model == null)
- {
- throw new ArgumentNullException(nameof(model));
- }
- if (!withParams)
- {
- return;
- }
- if (string.IsNullOrEmpty(model.MessageId))
- {
- throw new ArgumentNullException("Не указан id сообщения", nameof(model.MessageId));
- }
- if (string.IsNullOrEmpty(model.SenderName))
- {
- throw new ArgumentNullException("Не указао почта", nameof(model.SenderName));
- }
- if (string.IsNullOrEmpty(model.Subject))
- {
- throw new ArgumentNullException("Не указана тема", nameof(model.Subject));
- }
- if (string.IsNullOrEmpty(model.Body))
- {
- throw new ArgumentNullException("Не указан текст сообщения", nameof(model.Subject));
- }
-
- _logger.LogInformation("MessageInfo. MessageId:{MessageId}.SenderName:{SenderName}.Subject:{Subject}.Body:{Body}", model.MessageId, model.SenderName, model.Subject, model.Body);
- var element = _clientStorage.GetElement(new ClientSearchModel
- {
- Email = model.SenderName
- });
- if (element == null)
- {
- _logger.LogWarning("Не удалоссь найти клиента, отправившего письмо с адреса Email:{Email}", model.SenderName);
- }
- else
- {
- model.ClientId = element.Id;
- }
- }
}
}
diff --git a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/MailWorker/AbstractMailWorker.cs b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/MailWorker/AbstractMailWorker.cs
index 49c4399..d14afed 100644
--- a/FurnitureAssembly/FurnitureAssemblyBusinessLogic/MailWorker/AbstractMailWorker.cs
+++ b/FurnitureAssembly/FurnitureAssemblyBusinessLogic/MailWorker/AbstractMailWorker.cs
@@ -72,6 +72,7 @@ namespace FurnitureAssemblyBusinessLogic.MailWorker
_logger.LogDebug("Check Mail: {Count} new mails", list.Count);
foreach (var mail in list)
{
+ mail.ClientId = _clientLogic.ReadElement(new() { Email = mail.SenderName })?.Id;
_messageInfoLogic.Create(mail);
}
}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/Attributes/ColumnAttribute.cs b/FurnitureAssembly/FurnitureAssemblyContracts/Attributes/ColumnAttribute.cs
new file mode 100644
index 0000000..f453606
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/Attributes/ColumnAttribute.cs
@@ -0,0 +1,24 @@
+using System;
+
+namespace FurnitureAssemblyContracts.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/FurnitureAssembly/FurnitureAssemblyContracts/Attributes/GridViewAutoSize.cs b/FurnitureAssembly/FurnitureAssemblyContracts/Attributes/GridViewAutoSize.cs
new file mode 100644
index 0000000..722d1bb
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/Attributes/GridViewAutoSize.cs
@@ -0,0 +1,14 @@
+namespace FurnitureAssemblyContracts.Attributes
+{
+ public enum GridViewAutoSize
+ {
+ NotSet = 0,
+ None = 1,
+ ColumnHeader = 2,
+ AllCellsExceptHeader = 4,
+ AllCells = 6,
+ DisplayedCellsExceptHeader = 8,
+ DisplayedCells = 10,
+ Fill = 16
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/BindingModels/BackUpSaveBinidngModel.cs b/FurnitureAssembly/FurnitureAssemblyContracts/BindingModels/BackUpSaveBinidngModel.cs
new file mode 100644
index 0000000..23320f7
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/BindingModels/BackUpSaveBinidngModel.cs
@@ -0,0 +1,7 @@
+namespace FurnitureAssemblyContracts.BindingModels
+{
+ public class BackUpSaveBinidngModel
+ {
+ public string FolderName { get; set; } = string.Empty;
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/BindingModels/MessageInfoBindingModel.cs b/FurnitureAssembly/FurnitureAssemblyContracts/BindingModels/MessageInfoBindingModel.cs
index 10e611a..ef4b265 100644
--- a/FurnitureAssembly/FurnitureAssemblyContracts/BindingModels/MessageInfoBindingModel.cs
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/BindingModels/MessageInfoBindingModel.cs
@@ -15,5 +15,6 @@ namespace FurnitureAssemblyContracts.BindingModels
public string Subject { get; set; } = string.Empty;
public string Body { get; set; } = string.Empty;
+ public int Id => throw new NotImplementedException();
}
}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/BusinessLogicsContracts/IBackUpLogic.cs b/FurnitureAssembly/FurnitureAssemblyContracts/BusinessLogicsContracts/IBackUpLogic.cs
new file mode 100644
index 0000000..c0f25b3
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/BusinessLogicsContracts/IBackUpLogic.cs
@@ -0,0 +1,9 @@
+using FurnitureAssemblyContracts.BindingModels;
+
+namespace FurnitureAssemblyContracts.BusinessLogicsContarcts
+{
+ public interface IBackUpLogic
+ {
+ void CreateBackUp(BackUpSaveBinidngModel model);
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/DI/DependencyManager.cs b/FurnitureAssembly/FurnitureAssemblyContracts/DI/DependencyManager.cs
new file mode 100644
index 0000000..6b99863
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/DI/DependencyManager.cs
@@ -0,0 +1,64 @@
+using Microsoft.Extensions.Logging;
+
+namespace FurnitureAssemblyContracts.DI
+{
+ public class DependencyManager
+ {
+ private readonly IDependencyContainer _dependencyManager;
+ private static DependencyManager? _manager;
+ private static readonly object _locjObject = new();
+ private DependencyManager()
+ {
+ _dependencyManager = new ServiceDependencyContainer();
+ }
+ public static DependencyManager Instance
+ {
+ get
+ {
+ if (_manager == null) { lock (_locjObject) { _manager = new DependencyManager(); } }
+ return
+ _manager;
+ }
+ }
+ ///
+ /// Иницализация библиотек, в которых идут установки зависомстей
+ ///
+ public static void InitDependency()
+ {
+ var ext = ServiceProviderLoader.GetImplementationExtensions();
+ if (ext == null)
+ {
+ throw new ArgumentNullException("Отсутствуют компоненты для загрузки зависимостей по модулям");
+ }
+ // регистрируем зависимости
+ ext.RegisterServices();
+ }
+ ///
+ /// Регистрация логгера
+ ///
+ ///
+ public void AddLogging(Action configure) =>
+ _dependencyManager.AddLogging(configure);
+ ///
+ /// Добавление зависимости
+ ///
+ ///
+ ///
+ public void RegisterType(bool isSingle = false) where U :
+ class, T where T : class => _dependencyManager.RegisterType(isSingle);
+ ///
+ /// Добавление зависимости
+ ///
+ ///
+ ///
+ public void RegisterType(bool isSingle = false) where T : class =>
+ _dependencyManager.RegisterType(isSingle);
+ ///
+ /// Получение класса со всеми зависмостями
+ ///
+ ///
+ ///
+ public T Resolve() => _dependencyManager.Resolve();
+
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/DI/IDependencyContainer.cs b/FurnitureAssembly/FurnitureAssemblyContracts/DI/IDependencyContainer.cs
new file mode 100644
index 0000000..e0fbe35
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/DI/IDependencyContainer.cs
@@ -0,0 +1,34 @@
+using Microsoft.Extensions.Logging;
+
+namespace FurnitureAssemblyContracts.DI
+{
+ public interface IDependencyContainer
+ {
+ ///
+ /// Регистрация логгера
+ ///
+ ///
+ void AddLogging(Action configure);
+ ///
+ /// Добавление зависимости
+ ///
+ ///
+ ///
+ ///
+ void RegisterType(bool isSingle) where U : class, T where T :
+ class;
+ ///
+ /// Добавление зависимости
+ ///
+ ///
+ ///
+ void RegisterType(bool isSingle) where T : class;
+ ///
+ /// Получение класса со всеми зависмостями
+ ///
+ ///
+ ///
+ T Resolve();
+
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/DI/IImplementationExtension.cs b/FurnitureAssembly/FurnitureAssemblyContracts/DI/IImplementationExtension.cs
new file mode 100644
index 0000000..0878428
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/DI/IImplementationExtension.cs
@@ -0,0 +1,11 @@
+namespace FurnitureAssemblyContracts.DI
+{
+ public interface IImplementationExtension
+ {
+ public int Priority { get; }
+ ///
+ /// Регистрация сервисов
+ ///
+ public void RegisterServices();
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/DI/ServiceDependencyContainer.cs b/FurnitureAssembly/FurnitureAssemblyContracts/DI/ServiceDependencyContainer.cs
new file mode 100644
index 0000000..cebccbe
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/DI/ServiceDependencyContainer.cs
@@ -0,0 +1,57 @@
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+
+namespace FurnitureAssemblyContracts.DI
+{
+ public class ServiceDependencyContainer : IDependencyContainer
+ {
+ private ServiceProvider? _serviceProvider;
+
+ private readonly ServiceCollection _serviceCollection;
+
+ public ServiceDependencyContainer()
+ {
+ _serviceCollection = new ServiceCollection();
+ }
+
+ public void AddLogging(Action configure)
+ {
+ _serviceCollection.AddLogging(configure);
+ }
+
+ public void RegisterType(bool isSingle) where U : class, T where T : class
+ {
+ if (isSingle)
+ {
+ _serviceCollection.AddSingleton();
+ }
+ else
+ {
+ _serviceCollection.AddTransient();
+ }
+ _serviceProvider = null;
+ }
+
+ public void RegisterType(bool isSingle) where T : class
+ {
+ if (isSingle)
+ {
+ _serviceCollection.AddSingleton();
+ }
+ else
+ {
+ _serviceCollection.AddTransient();
+ }
+ _serviceProvider = null;
+ }
+
+ public T Resolve()
+ {
+ if (_serviceProvider == null)
+ {
+ _serviceProvider = _serviceCollection.BuildServiceProvider();
+ }
+ return _serviceProvider.GetService()!;
+ }
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/DI/ServiceProviderLoader.cs b/FurnitureAssembly/FurnitureAssemblyContracts/DI/ServiceProviderLoader.cs
new file mode 100644
index 0000000..6778099
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/DI/ServiceProviderLoader.cs
@@ -0,0 +1,52 @@
+using System.Reflection;
+
+namespace FurnitureAssemblyContracts.DI
+{
+ public static partial class ServiceProviderLoader
+ {
+ ///
+ /// Загрузка всех классов-реализаций IImplementationExtension
+ ///
+ ///
+ 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/FurnitureAssembly/FurnitureAssemblyContracts/DI/UnityDependencyContainer.cs b/FurnitureAssembly/FurnitureAssemblyContracts/DI/UnityDependencyContainer.cs
new file mode 100644
index 0000000..6425937
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/DI/UnityDependencyContainer.cs
@@ -0,0 +1,52 @@
+using Microsoft.Extensions.Logging;
+using Unity;
+using Unity.Microsoft.Logging;
+
+namespace FurnitureAssemblyContracts.DI
+{
+ public class UnityDependencyContainer : IDependencyContainer
+ {
+ private readonly IUnityContainer container;
+
+ public UnityDependencyContainer()
+ {
+ container = new UnityContainer();
+ }
+
+ public void AddLogging(Action configure)
+ {
+ // регистрируем логгер в контейнере
+ var factory = LoggerFactory.Create(configure);
+ container.AddExtension(new LoggingExtension(factory));
+ }
+
+ public void RegisterType(bool isSingle) where T : class
+ {
+ if (isSingle)
+ {
+ container.RegisterSingleton();
+ }
+ else
+ {
+ container.RegisterType();
+ }
+ }
+
+ public T Resolve()
+ {
+ return container.Resolve();
+ }
+
+ void IDependencyContainer.RegisterType(bool isSingle)
+ {
+ if (isSingle)
+ {
+ container.RegisterSingleton();
+ }
+ else
+ {
+ container.RegisterType();
+ }
+ }
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/FurnitureAssemblyContracts.csproj b/FurnitureAssembly/FurnitureAssemblyContracts/FurnitureAssemblyContracts.csproj
index 6a503df..a8e5f90 100644
--- a/FurnitureAssembly/FurnitureAssemblyContracts/FurnitureAssemblyContracts.csproj
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/FurnitureAssemblyContracts.csproj
@@ -6,8 +6,11 @@
enable
-
-
+
+
+
+
+
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/StoragesContracts/IBackUpInfo.cs b/FurnitureAssembly/FurnitureAssemblyContracts/StoragesContracts/IBackUpInfo.cs
new file mode 100644
index 0000000..f770812
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/StoragesContracts/IBackUpInfo.cs
@@ -0,0 +1,8 @@
+namespace FurnitureAssemblyContracts.StoragesContracts
+{
+ public interface IBackUpInfo
+ {
+ List? GetList() where T : class, new();
+ Type? GetTypeByModelInterface(string modelInterfaceName);
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ClientViewModel.cs b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ClientViewModel.cs
index 22784d6..d4dec8a 100644
--- a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ClientViewModel.cs
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ClientViewModel.cs
@@ -1,4 +1,5 @@
-using FurnitureAssemblyDataModels.Models;
+using FurnitureAssemblyContracts.Attributes;
+using FurnitureAssemblyDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -10,12 +11,13 @@ namespace FurnitureAssemblyContracts.ViewModels
{
public class ClientViewModel : IClientModel
{
+ [Column(visible: false)]
public int Id { get; set; }
- [DisplayName("ФИО клиента")]
+ [Column(title: "ФИО клиента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string ClientFIO { get; set; } = string.Empty;
- [DisplayName("Логин (эл. почта)")]
+ [Column(title: "Логин (эл. почта)", width: 150)]
public string Email { get; set; } = string.Empty;
- [DisplayName("Пароль")]
+ [Column(title: "Пароль", width: 150)]
public string Password { get; set; } = string.Empty;
}
}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ComponentViewModel.cs b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ComponentViewModel.cs
index 516ff28..40de866 100644
--- a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ComponentViewModel.cs
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ComponentViewModel.cs
@@ -1,4 +1,5 @@
-using FurnitureAssemblyDataModels.Models;
+using FurnitureAssemblyContracts.Attributes;
+using FurnitureAssemblyDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -10,10 +11,11 @@ namespace FurnitureAssemblyContracts.ViewModels
{
public class ComponentViewModel : IComponentModel
{
+ [Column(visible: false)]
public int Id { get; set; }
- [DisplayName("Название компонента")]
+ [Column(title: "Название компонента", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string ComponentName { get; set; } = string.Empty;
- [DisplayName("Цена")]
+ [Column(title: "Цена", width: 70)]
public double Cost { get; set; }
}
}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/FurnitureViewModel.cs b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/FurnitureViewModel.cs
index f0a1775..73abdcd 100644
--- a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/FurnitureViewModel.cs
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/FurnitureViewModel.cs
@@ -1,4 +1,5 @@
-using FurnitureAssemblyDataModels.Models;
+using FurnitureAssemblyContracts.Attributes;
+using FurnitureAssemblyDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -10,11 +11,13 @@ namespace FurnitureAssemblyContracts.ViewModels
{
public class FurnitureViewModel : IFurnitureModel
{
+ [Column(visible: false)]
public int Id { get; set; }
- [DisplayName("Название изделия")]
+ [Column(title: "Название изделия", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string FurnitureName { get; set; } = string.Empty;
- [DisplayName("Цена")]
+ [Column(title: "Цена", width: 70)]
public double Price { get; set; }
+ [Column(visible: false)]
public Dictionary FurnitureComponents { get; set; } = new();
}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ImplementerViewModel.cs b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ImplementerViewModel.cs
index 117e972..1ec5b16 100644
--- a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ImplementerViewModel.cs
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/ImplementerViewModel.cs
@@ -1,4 +1,5 @@
-using FurnitureAssemblyDataModels.Models;
+using FurnitureAssemblyContracts.Attributes;
+using FurnitureAssemblyDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -10,15 +11,15 @@ namespace FurnitureAssemblyContracts.ViewModels
{
public class ImplementerViewModel : IImplementerModel
{
+ [Column(visible: false)]
public int Id { get; set; }
- [DisplayName("ФИО исполнителя")]
+ [Column(title: "ФИО исполнителя", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string ImplementerFIO { get; set; } = string.Empty;
- [DisplayName("Пароль")]
+ [Column(title: "Пароль", width: 150)]
public string Password { get; set; } = string.Empty;
- [DisplayName("Опыт работы")]
+ [Column(title: "Опыт работы", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
public int WorkExperience { get; set; }
-
- [DisplayName("Квалификация")]
+ [Column(title: "Квалификация", gridViewAutoSize: GridViewAutoSize.AllCells, isUseAutoSize: true)]
public int Qualification { get; set; }
}
}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/MessageInfoViewModel.cs b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/MessageInfoViewModel.cs
index 98b85aa..60490d2 100644
--- a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/MessageInfoViewModel.cs
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/MessageInfoViewModel.cs
@@ -1,20 +1,24 @@
-using FurnitureAssemblyDataModels.Models;
+using FurnitureAssemblyContracts.Attributes;
+using FurnitureAssemblyDataModels.Models;
using System.ComponentModel;
namespace FurnitureAssemblyContracts.ViewModels
{
public class MessageInfoViewModel : IMessageInfoModel
{
+ [Column(visible: false)]
public string MessageId { get; set; } = string.Empty;
-
+ [Column(visible: false)]
public int? ClientId { get; set; }
- [DisplayName("Отправитель")]
+ [Column(title: "Отправитель", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string SenderName { get; set; } = string.Empty;
- [DisplayName("Дата письма")]
+ [Column(title: "Дата письма", width: 100)]
public DateTime DateDelivery { get; set; }
- [DisplayName("Заголовок")]
+ [Column(title: "Заголовок", width: 170)]
public string Subject { get; set; } = string.Empty;
- [DisplayName("Текст")]
+ [Column(title: "Текст", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string Body { get; set; } = string.Empty;
+ [Column(visible: false)]
+ public int Id => throw new NotImplementedException();
}
}
diff --git a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/OrderViewModel.cs b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/OrderViewModel.cs
index 77d0e9e..065bfd5 100644
--- a/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/OrderViewModel.cs
+++ b/FurnitureAssembly/FurnitureAssemblyContracts/ViewModels/OrderViewModel.cs
@@ -1,4 +1,5 @@
-using FurnitureAssemblyDataModels.Enums;
+using FurnitureAssemblyContracts.Attributes;
+using FurnitureAssemblyDataModels.Enums;
using FurnitureAssemblyDataModels.Models;
using System;
using System.Collections.Generic;
@@ -11,27 +12,29 @@ namespace FurnitureAssemblyContracts.ViewModels
{
public class OrderViewModel : IOrderModel
{
- [DisplayName("Номер")]
+ [Column(title: "Номер", width: 50)]
public int Id { get; set; }
-
- public int FurnitureId { get; set; }
- [DisplayName("Изделие")]
- public string FurnitureName { 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(visible: false)]
public int ClientId { get; set; }
- [DisplayName("Клиент")]
+ [Column(title: "Клиент", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string ClientFIO { get; set; } = string.Empty;
+ [Column(visible: false)]
+ public int FurnitureId { get; set; }
+ [Column(title: "Изделие", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
+ public string FurnitureName { get; set; } = string.Empty;
+ [Column(title: "Количество", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
+ public int Count { get; set; }
+ [Column(title: "Сумма", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
+ public double Sum { get; set; }
+ [Column(title: "Статус", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
+ public OrderStatus Status { get; set; } = OrderStatus.Неизвестен;
+ [Column(title: "Дата создания", width: 100)]
+ public DateTime DateCreate { get; set; } = DateTime.Now;
+ [Column(title: "Дата выполнения", width: 100)]
+ public DateTime? DateImplement { get; set; }
+ [Column(visible: false)]
public int? ImplementerId { get; set; }
- [DisplayName("Исполнитель")]
+ [Column(title: "Исполнитель", gridViewAutoSize: GridViewAutoSize.Fill, isUseAutoSize: true)]
public string? ImplementerFIO { get; set; } = string.Empty;
}
}
\ No newline at end of file
diff --git a/FurnitureAssembly/FurnitureAssemblyDataModels/FurnitureAssemblyDataModels.csproj b/FurnitureAssembly/FurnitureAssemblyDataModels/FurnitureAssemblyDataModels.csproj
index c2da37c..27ac386 100644
--- a/FurnitureAssembly/FurnitureAssemblyDataModels/FurnitureAssemblyDataModels.csproj
+++ b/FurnitureAssembly/FurnitureAssemblyDataModels/FurnitureAssemblyDataModels.csproj
@@ -6,8 +6,4 @@
enable
-
-
-
-
diff --git a/FurnitureAssembly/FurnitureAssemblyDataModels/Models/IMessageInfoModel.cs b/FurnitureAssembly/FurnitureAssemblyDataModels/Models/IMessageInfoModel.cs
index 6139889..b8eb1b3 100644
--- a/FurnitureAssembly/FurnitureAssemblyDataModels/Models/IMessageInfoModel.cs
+++ b/FurnitureAssembly/FurnitureAssemblyDataModels/Models/IMessageInfoModel.cs
@@ -1,6 +1,6 @@
namespace FurnitureAssemblyDataModels.Models
{
- public interface IMessageInfoModel
+ public interface IMessageInfoModel : IId
{
string MessageId { get; }
int? ClientId { get; }
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/DatabaseImplementationExtension.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/DatabaseImplementationExtension.cs
new file mode 100644
index 0000000..1364576
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/DatabaseImplementationExtension.cs
@@ -0,0 +1,22 @@
+using FurnitureAssemblyContracts.DI;
+using FurnitureAssemblyContracts.StoragesContracts;
+using FurnitureAssemblyDatabaseImplement.Implements;
+
+namespace FurnitureAssemblyDatabaseImplement
+{
+ public class DatabaseImplementationExtension : IImplementationExtension
+ {
+ public int Priority => 2;
+
+ public void RegisterServices()
+ {
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ }
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/FurnitureAssemblyDatabase.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/FurnitureAssemblyDatabase.cs
index 364febb..7461246 100644
--- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/FurnitureAssemblyDatabase.cs
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/FurnitureAssemblyDatabase.cs
@@ -1,29 +1,29 @@
-using FurnitureAssemblyDatabaseImplement.Models;
-using Microsoft.EntityFrameworkCore;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace FurnitureAssemblyDatabaseImplement
-{
- public class FurnitureAssemblyDatabase : DbContext
- {
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- if (optionsBuilder.IsConfigured == false)
- {
- optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-K0U29OV;Initial Catalog=FurnitureAssemblyDatabaseFull2;Integrated Security=True;MultipleActiveResultSets=True;TrustServerCertificate=True");
- }
- base.OnConfiguring(optionsBuilder);
- }
- public virtual DbSet Components { set; get; }
- public virtual DbSet Furnitures { set; get; }
- public virtual DbSet FurnitureComponents { set; get; }
- public virtual DbSet Orders { set; get; }
- public virtual DbSet Clients { set; get; }
- public virtual DbSet Implementers { set; get; }
- public virtual DbSet Messages { set; get; }
- }
-}
+using FurnitureAssemblyDatabaseImplement.Models;
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace FurnitureAssemblyDatabaseImplement
+{
+ public class FurnitureAssemblyDatabase : DbContext
+ {
+ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+ {
+ if (optionsBuilder.IsConfigured == false)
+ {
+ optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-K0U29OV;Initial Catalog=FurnitureAssemblyDatabaseFull2;Integrated Security=True;MultipleActiveResultSets=True;TrustServerCertificate=True");
+ }
+ base.OnConfiguring(optionsBuilder);
+ }
+ public virtual DbSet Components { set; get; }
+ public virtual DbSet Furnitures { set; get; }
+ public virtual DbSet FurnitureComponents { set; get; }
+ public virtual DbSet Orders { set; get; }
+ public virtual DbSet Clients { set; get; }
+ public virtual DbSet Implementers { set; get; }
+ public virtual DbSet Messages { set; get; }
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/FurnitureAssemblyDatabaseImplement.csproj b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/FurnitureAssemblyDatabaseImplement.csproj
index cf74c31..55841a6 100644
--- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/FurnitureAssemblyDatabaseImplement.csproj
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/FurnitureAssemblyDatabaseImplement.csproj
@@ -1,24 +1,27 @@
-
-
-
- net6.0
- enable
- enable
-
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
-
-
-
-
-
-
-
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/BackUpInfo.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/BackUpInfo.cs
new file mode 100644
index 0000000..e2bf4b8
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/BackUpInfo.cs
@@ -0,0 +1,26 @@
+using FurnitureAssemblyContracts.StoragesContracts;
+
+namespace FurnitureAssemblyDatabaseImplement.Implements
+{
+ public class BackUpInfo : IBackUpInfo
+ {
+ public List? GetList() where T : class, new()
+ {
+ using var context = new FurnitureAssemblyDatabase();
+ return context.Set().ToList();
+ }
+ public Type? GetTypeByModelInterface(string modelInterfaceName)
+ {
+ var assembly = typeof(BackUpInfo).Assembly;
+ var types = assembly.GetTypes();
+ foreach (var type in types)
+ {
+ if (type.IsClass && type.GetInterface(modelInterfaceName) != null)
+ {
+ return type;
+ }
+ }
+ return null;
+ }
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/MessageInfoStorage.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/MessageInfoStorage.cs
index bfc5310..50468d4 100644
--- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/MessageInfoStorage.cs
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Implements/MessageInfoStorage.cs
@@ -29,13 +29,18 @@ namespace FurnitureAssemblyDatabaseImplement.Implements
return new();
}
using var context = new FurnitureAssemblyDatabase();
- return context.Messages.Where(x => x.ClientId.HasValue && x.ClientId == model.ClientId).Select(x => x.GetViewModel).ToList();
+ return context.Messages
+ .Where(x => x.ClientId == model.ClientId)
+ .Select(x => x.GetViewModel)
+ .ToList();
}
public List GetFullList()
{
using var context = new FurnitureAssemblyDatabase();
- return context.Messages.Select(x => x.GetViewModel).ToList();
+ return context.Messages
+ .Select(x => x.GetViewModel)
+ .ToList();
}
public MessageInfoViewModel? Insert(MessageInfoBindingModel model)
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Client.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Client.cs
index 76914fd..5d55a58 100644
--- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Client.cs
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Client.cs
@@ -8,17 +8,23 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
namespace FurnitureAssemblyDatabaseImplement.Models
{
+ [DataContract]
public class Client : IClientModel
{
+ [DataMember]
public int Id { get; private set; }
[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;
[ForeignKey("ClientId")]
public virtual List Messages { get; set; } = new();
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Component.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Component.cs
index 1ec3c8a..73634d2 100644
--- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Component.cs
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Component.cs
@@ -4,15 +4,20 @@ using FurnitureAssemblyContracts.ViewModels;
using FurnitureAssemblyDataModels.Models;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
+using System.Runtime.Serialization;
namespace FurnitureAssemblyDatabaseImplement.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 FurnitureComponents { get; set; } = new();
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Furniture.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Furniture.cs
index 992dc97..ffdfe7d 100644
--- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Furniture.cs
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Furniture.cs
@@ -6,20 +6,26 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
+using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace FurnitureAssemblyDatabaseImplement.Models
{
+ [DataContract]
public class Furniture : IFurnitureModel
{
+ [DataMember]
public int Id { get; set; }
[Required]
+ [DataMember]
public string FurnitureName { get; set; } = string.Empty;
[Required]
+ [DataMember]
public double Price { get; set; }
private Dictionary? _furnitureComponents = null;
[NotMapped]
+ [DataMember]
public Dictionary FurnitureComponents
{
get
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/FurnitureComponent.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/FurnitureComponent.cs
index 67081f0..f91d37d 100644
--- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/FurnitureComponent.cs
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/FurnitureComponent.cs
@@ -14,7 +14,6 @@ namespace FurnitureAssemblyDatabaseImplement.Models
public int FurnitureId { get; set; }
[Required]
public int ComponentId { get; set; }
-
[Required]
public int Count { get; set; }
public virtual Component Component { get; set; } = new();
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Implementer.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Implementer.cs
index 2f052b0..35ae83c 100644
--- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Implementer.cs
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Implementer.cs
@@ -6,21 +6,28 @@ using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
+using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
namespace FurnitureAssemblyDatabaseImplement.Models
{
+ [DataContract]
public class Implementer : IImplementerModel
{
+ [DataMember]
public int Id { get; private set; }
[Required]
+ [DataMember]
public string ImplementerFIO { get; private set; } = string.Empty;
[Required]
+ [DataMember]
public string Password { get; private set; } = string.Empty;
[Required]
+ [DataMember]
public int WorkExperience { get; private set; }
[Required]
+ [DataMember]
public int Qualification { get; private set; }
[ForeignKey("ImplementerId")]
public virtual List Orders { get; private set; } = new();
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/MessageInfo.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/MessageInfo.cs
index 1895136..e1f5a99 100644
--- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/MessageInfo.cs
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/MessageInfo.cs
@@ -2,23 +2,27 @@
using FurnitureAssemblyContracts.ViewModels;
using FurnitureAssemblyDataModels.Models;
using System.ComponentModel.DataAnnotations;
+using System.Runtime.Serialization;
namespace FurnitureAssemblyDatabaseImplement.Models
{
+ [DataContract]
public class MessageInfo : 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.Now;
-
+ [DataMember]
public string Subject { get; private set; } = string.Empty;
-
+ [DataMember]
public string Body { get; private set; } = string.Empty;
+ public int Id => throw new NotImplementedException();
public virtual Client? Client { get; private set; }
diff --git a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Order.cs b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Order.cs
index c59d228..e200d62 100644
--- a/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Order.cs
+++ b/FurnitureAssembly/FurnitureAssemblyDatabaseImplement/Models/Order.cs
@@ -12,30 +12,38 @@ using System.Threading.Tasks;
using System.Xml.Linq;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
+using System.Runtime.Serialization;
namespace FurnitureAssemblyDatabaseImplement.Models
{
+ [DataContract]
public class Order : IOrderModel
{
[ForeignKey("ProductId")]
+ [DataMember]
public int FurnitureId { get; set; }
[Required]
+ [DataMember]
public int Count { get; set; }
[Required]
+ [DataMember]
public double Sum { get; set; }
[Required]
+ [DataMember]
public OrderStatus Status { get; set; }
[Required]
+ [DataMember]
public DateTime DateCreate { get; set; }
-
+ [DataMember]
public DateTime? DateImplement { get; set; }
-
+ [DataMember]
public int Id { get; set; }
[Required]
+ [DataMember]
public int ClientId { get; private set; }
-
public virtual Client Client { get; set; }
public virtual Furniture Furniture { get; set; }
+ [DataMember]
public int? ImplementerId { get; private set; }
public virtual Implementer? Implementer { get; set; }
diff --git a/FurnitureAssembly/FurnitureAssemblyFileImplement/FileImplementationExtension.cs b/FurnitureAssembly/FurnitureAssemblyFileImplement/FileImplementationExtension.cs
new file mode 100644
index 0000000..9654243
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyFileImplement/FileImplementationExtension.cs
@@ -0,0 +1,22 @@
+using FurnitureAssemblyContracts.DI;
+using FurnitureAssemblyContracts.StoragesContracts;
+using FurnitureAssemblyDatabaseImplement.Implements;
+
+namespace FurnitureAssemFileImplement
+{
+ public class FileImplementationExtension : IImplementationExtension
+ {
+ public int Priority => 1;
+
+ public void RegisterServices()
+ {
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ }
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyFileImplement/FurnitureAssemblyFileImplement.csproj b/FurnitureAssembly/FurnitureAssemblyFileImplement/FurnitureAssemblyFileImplement.csproj
index 9a5a60c..1ffafce 100644
--- a/FurnitureAssembly/FurnitureAssemblyFileImplement/FurnitureAssemblyFileImplement.csproj
+++ b/FurnitureAssembly/FurnitureAssemblyFileImplement/FurnitureAssemblyFileImplement.csproj
@@ -7,14 +7,14 @@
enable
-
-
-
-
+
+
+
+
diff --git a/FurnitureAssembly/FurnitureAssemblyFileImplement/Implements/BackUpInfo.cs b/FurnitureAssembly/FurnitureAssemblyFileImplement/Implements/BackUpInfo.cs
new file mode 100644
index 0000000..5231f0e
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyFileImplement/Implements/BackUpInfo.cs
@@ -0,0 +1,31 @@
+using FurnitureAssemblyContracts.StoragesContracts;
+using FurnitureAssemblyFileImplement;
+using System.Reflection;
+
+namespace FurnitureAssemFileImplement.Implements
+{
+ public class BackUpInfo : IBackUpInfo
+ {
+ public List? GetList() where T : class, new()
+ {
+ DataFileSingleton dataFileSingleton = DataFileSingleton.GetInstance();
+ return (List?) dataFileSingleton.GetType().GetProperties()
+ .FirstOrDefault(x => x.PropertyType.IsGenericType && x.PropertyType.GetGenericArguments()[0] == typeof(T))?
+ .GetValue(dataFileSingleton);
+ }
+
+ 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/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Client.cs b/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Client.cs
index 620d671..31dce37 100644
--- a/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Client.cs
+++ b/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Client.cs
@@ -1,18 +1,21 @@
using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyContracts.ViewModels;
using FurnitureAssemblyDataModels.Models;
+using System.Runtime.Serialization;
using System.Xml.Linq;
namespace FurnitureAssemblyFileImplement_.Models
{
+ [DataContract]
public class Client : IClientModel
{
+ [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)
diff --git a/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Component.cs b/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Component.cs
index 7036dec..7d574e8 100644
--- a/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Component.cs
+++ b/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Component.cs
@@ -1,14 +1,19 @@
using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyContracts.ViewModels;
using FurnitureAssemblyDataModels.Models;
+using System.Runtime.Serialization;
using System.Xml.Linq;
namespace FurnitureAssemblyFileImplement.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/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Furniture.cs b/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Furniture.cs
index 80ad7dc..6595cb0 100644
--- a/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Furniture.cs
+++ b/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Furniture.cs
@@ -1,17 +1,23 @@
using FurnitureAssemblyContracts.BindingModels;
using FurnitureAssemblyContracts.ViewModels;
using FurnitureAssemblyDataModels.Models;
+using System.Runtime.Serialization;
using System.Xml.Linq;
namespace FurnitureAssemblyFileImplement.Models
{
+ [DataContract]
public class Furniture : IFurnitureModel
{
+ [DataMember]
public int Id { get; private set; }
+ [DataMember]
public string FurnitureName { get; private set; } = string.Empty;
+ [DataMember]
public double Price { get; private set; }
public Dictionary Components { get; private set; } = new();
private Dictionary? _furnitureComponents = null;
+ [DataMember]
public Dictionary FurnitureComponents
{
get
diff --git a/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Implementer.cs b/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Implementer.cs
index df3a6b4..d823aa0 100644
--- a/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Implementer.cs
+++ b/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Implementer.cs
@@ -4,21 +4,25 @@ using FurnitureAssemblyDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace FurnitureAssemblyFileImplement_.Models
{
+ [DataContract]
public class Implementer : IImplementerModel
{
+ [DataMember]
public int Id { get; private set; }
+ [DataMember]
public string ImplementerFIO { get; private set; } = string.Empty;
-
+ [DataMember]
public string Password { get; private set; } = string.Empty;
-
+ [DataMember]
public int WorkExperience { get; private set; }
-
+ [DataMember]
public int Qualification { get; private set; }
public static Implementer? Create(ImplementerBindingModel? model)
diff --git a/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/MessageInfo.cs b/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/MessageInfo.cs
index 875289a..a321042 100644
--- a/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/MessageInfo.cs
+++ b/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/MessageInfo.cs
@@ -4,25 +4,29 @@ using FurnitureAssemblyDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace FurnitureAssemblyFileImplement.Models
{
+ [DataContract]
public class MessageInfo : IMessageInfoModel
{
+ [DataMember]
public string MessageId { get; private set; } = string.Empty;
-
+ [DataMember]
public int? ClientId { get; private set; }
-
+ [DataMember]
public string SenderName { get; private set; } = string.Empty;
-
+ [DataMember]
public DateTime DateDelivery { get; private set; } = DateTime.Now;
-
+ [DataMember]
public string Subject { get; private set; } = string.Empty;
-
+ [DataMember]
public string Body { get; private set; } = string.Empty;
+ public int Id => throw new NotImplementedException();
public static MessageInfo? Create(MessageInfoBindingModel model)
{
diff --git a/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Order.cs b/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Order.cs
index 3913211..d2c5f7e 100644
--- a/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Order.cs
+++ b/FurnitureAssembly/FurnitureAssemblyFileImplement/Models/Order.cs
@@ -7,30 +7,35 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
+using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace FurnitureAssemblyFileImplement.Models
{
+ [DataContract]
public class Order : IOrderModel
{
+ [DataMember]
public int FurnitureId { get; private set; }
-
+ [DataMember]
public string FurnitureName { get; private set; } = string.Empty;
-
+ [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; }
+ [DataMember]
public int ClientId { get; private set; }
-
+ [DataMember]
public int Id { get; private set; }
+ [DataMember]
public int? ImplementerId { get; private set; } = null;
public static Order? Create(OrderBindingModel? model)
diff --git a/FurnitureAssembly/FurnitureAssemblyListImplement/FurnitureAssemblyListImplement.csproj b/FurnitureAssembly/FurnitureAssemblyListImplement/FurnitureAssemblyListImplement.csproj
index 04d3de8..b8b6f05 100644
--- a/FurnitureAssembly/FurnitureAssemblyListImplement/FurnitureAssemblyListImplement.csproj
+++ b/FurnitureAssembly/FurnitureAssemblyListImplement/FurnitureAssemblyListImplement.csproj
@@ -6,14 +6,14 @@
enable
-
-
-
-
+
+
+
+
diff --git a/FurnitureAssembly/FurnitureAssemblyListImplement/Implements/BackUpInfo.cs b/FurnitureAssembly/FurnitureAssemblyListImplement/Implements/BackUpInfo.cs
new file mode 100644
index 0000000..b099c9c
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyListImplement/Implements/BackUpInfo.cs
@@ -0,0 +1,18 @@
+using FurnitureAssemblyContracts.StoragesContracts;
+
+
+namespace FurnitureAssemblyListImplement.Implements
+{
+ public class BackUpInfo : IBackUpInfo
+ {
+ public List? GetList() where T : class, new()
+ {
+ throw new NotImplementedException();
+ }
+
+ public Type? GetTypeByModelInterface(string modelInterfaceName)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyListImplement/ListImplementationExtension.cs b/FurnitureAssembly/FurnitureAssemblyListImplement/ListImplementationExtension.cs
new file mode 100644
index 0000000..8f39b42
--- /dev/null
+++ b/FurnitureAssembly/FurnitureAssemblyListImplement/ListImplementationExtension.cs
@@ -0,0 +1,22 @@
+using FurnitureAssemblyContracts.DI;
+using FurnitureAssemblyContracts.StoragesContracts;
+using FurnitureAssemblyListImplement.Implements;
+
+namespace FurnitureAssemblyListImplement
+{
+ public class ListImplementationExtension : IImplementationExtension
+ {
+ public int Priority => 0;
+
+ public void RegisterServices()
+ {
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ DependencyManager.Instance.RegisterType();
+ }
+ }
+}
diff --git a/FurnitureAssembly/FurnitureAssemblyListImplement/Models/MessageInfo.cs b/FurnitureAssembly/FurnitureAssemblyListImplement/Models/MessageInfo.cs
index 332bb9f..96e81a9 100644
--- a/FurnitureAssembly/FurnitureAssemblyListImplement/Models/MessageInfo.cs
+++ b/FurnitureAssembly/FurnitureAssemblyListImplement/Models/MessageInfo.cs
@@ -17,6 +17,7 @@ namespace FurnitureAssemblyListImplement.Models
public string Subject { get; private set; } = string.Empty;
public string Body { get; private set; } = string.Empty;
+ public int Id => throw new NotImplementedException();
public static MessageInfo? Create(MessageInfoBindingModel model)
{
diff --git a/FurnitureAssembly/ImplementationExtensions/FurnitureAssemblyContracts.dll b/FurnitureAssembly/ImplementationExtensions/FurnitureAssemblyContracts.dll
new file mode 100644
index 0000000..573ed6d
Binary files /dev/null and b/FurnitureAssembly/ImplementationExtensions/FurnitureAssemblyContracts.dll differ
diff --git a/FurnitureAssembly/ImplementationExtensions/FurnitureAssemblyDataModels.dll b/FurnitureAssembly/ImplementationExtensions/FurnitureAssemblyDataModels.dll
new file mode 100644
index 0000000..2dc1822
Binary files /dev/null and b/FurnitureAssembly/ImplementationExtensions/FurnitureAssemblyDataModels.dll differ
diff --git a/FurnitureAssembly/ImplementationExtensions/FurnitureAssemblyFileImplement.dll b/FurnitureAssembly/ImplementationExtensions/FurnitureAssemblyFileImplement.dll
new file mode 100644
index 0000000..4a608bc
Binary files /dev/null and b/FurnitureAssembly/ImplementationExtensions/FurnitureAssemblyFileImplement.dll differ
diff --git a/FurnitureAssembly/ImplementationExtensions/FurnitureAssemblyListImplement.dll b/FurnitureAssembly/ImplementationExtensions/FurnitureAssemblyListImplement.dll
new file mode 100644
index 0000000..cfb39b1
Binary files /dev/null and b/FurnitureAssembly/ImplementationExtensions/FurnitureAssemblyListImplement.dll differ