ToolPack1
Changes
Build/RW_Tool.Core.dll 0(+0 -0)
Build/RW_Tool.Core.pdb 0(+0 -0)
Build/RW_Tool.XML_BIN.dll 0(+0 -0)
Build/RW_Tool.XML_BIN.pdb 0(+0 -0)
Build/Tools.ConfigurationTool.dll 0(+0 -0)
Build/Tools.ConfigurationTool.pdb 0(+0 -0)
Build/Tools.SimpleBenchmark.dll 0(+0 -0)
Build/Tools.SimpleBenchmark.pdb 0(+0 -0)
Build/Tools.SingletonTool.dll 0(+0 -0)
Build/Tools.SingletonTool.pdb 0(+0 -0)
ToolPack1/RW_Tool/RW_Tool.Core/RW_Service.cs 69(+69 -0)
ToolPack1/RW_Tool/RW_Tool.XML_BIN/Factory.cs 23(+12 -11)
ToolPack1/ToolPack1.sln 4(+2 -2)
Details
Build/RW_Tool.Core.dll 0(+0 -0)
diff --git a/Build/RW_Tool.Core.dll b/Build/RW_Tool.Core.dll
index b35200a..514f626 100644
Binary files a/Build/RW_Tool.Core.dll and b/Build/RW_Tool.Core.dll differ
Build/RW_Tool.Core.pdb 0(+0 -0)
diff --git a/Build/RW_Tool.Core.pdb b/Build/RW_Tool.Core.pdb
index 67a7aee..bac7583 100644
Binary files a/Build/RW_Tool.Core.pdb and b/Build/RW_Tool.Core.pdb differ
diff --git a/Build/RW_Tool.DataSource.FileOrStream.dll b/Build/RW_Tool.DataSource.FileOrStream.dll
index dd6f715..6a24ba9 100644
Binary files a/Build/RW_Tool.DataSource.FileOrStream.dll and b/Build/RW_Tool.DataSource.FileOrStream.dll differ
diff --git a/Build/RW_Tool.DataSource.FileOrStream.pdb b/Build/RW_Tool.DataSource.FileOrStream.pdb
index 6444371..71d15aa 100644
Binary files a/Build/RW_Tool.DataSource.FileOrStream.pdb and b/Build/RW_Tool.DataSource.FileOrStream.pdb differ
Build/RW_Tool.XML_BIN.dll 0(+0 -0)
diff --git a/Build/RW_Tool.XML_BIN.dll b/Build/RW_Tool.XML_BIN.dll
index e435435..8092808 100644
Binary files a/Build/RW_Tool.XML_BIN.dll and b/Build/RW_Tool.XML_BIN.dll differ
Build/RW_Tool.XML_BIN.pdb 0(+0 -0)
diff --git a/Build/RW_Tool.XML_BIN.pdb b/Build/RW_Tool.XML_BIN.pdb
index 6517374..e3fc737 100644
Binary files a/Build/RW_Tool.XML_BIN.pdb and b/Build/RW_Tool.XML_BIN.pdb differ
Build/Tools.ConfigurationTool.dll 0(+0 -0)
diff --git a/Build/Tools.ConfigurationTool.dll b/Build/Tools.ConfigurationTool.dll
index e6205be..0f1d526 100644
Binary files a/Build/Tools.ConfigurationTool.dll and b/Build/Tools.ConfigurationTool.dll differ
Build/Tools.ConfigurationTool.pdb 0(+0 -0)
diff --git a/Build/Tools.ConfigurationTool.pdb b/Build/Tools.ConfigurationTool.pdb
index ad03055..205adf2 100644
Binary files a/Build/Tools.ConfigurationTool.pdb and b/Build/Tools.ConfigurationTool.pdb differ
Build/Tools.SimpleBenchmark.dll 0(+0 -0)
diff --git a/Build/Tools.SimpleBenchmark.dll b/Build/Tools.SimpleBenchmark.dll
index 6a4489e..81f0b0f 100644
Binary files a/Build/Tools.SimpleBenchmark.dll and b/Build/Tools.SimpleBenchmark.dll differ
Build/Tools.SimpleBenchmark.pdb 0(+0 -0)
diff --git a/Build/Tools.SimpleBenchmark.pdb b/Build/Tools.SimpleBenchmark.pdb
index 3e1a59c..a94fcb9 100644
Binary files a/Build/Tools.SimpleBenchmark.pdb and b/Build/Tools.SimpleBenchmark.pdb differ
Build/Tools.SingletonTool.dll 0(+0 -0)
diff --git a/Build/Tools.SingletonTool.dll b/Build/Tools.SingletonTool.dll
index 5664226..bfd9e96 100644
Binary files a/Build/Tools.SingletonTool.dll and b/Build/Tools.SingletonTool.dll differ
Build/Tools.SingletonTool.pdb 0(+0 -0)
diff --git a/Build/Tools.SingletonTool.pdb b/Build/Tools.SingletonTool.pdb
index 217bf60..b435563 100644
Binary files a/Build/Tools.SingletonTool.pdb and b/Build/Tools.SingletonTool.pdb differ
diff --git a/ToolPack1/RW_Tool/RW_Tool.Core/Abstract/I_RW_Service.cs b/ToolPack1/RW_Tool/RW_Tool.Core/Abstract/I_RW_Service.cs
new file mode 100644
index 0000000..5c85648
--- /dev/null
+++ b/ToolPack1/RW_Tool/RW_Tool.Core/Abstract/I_RW_Service.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace RW_Tool.Core.Abstract
+{
+ /// <summary>
+ /// Интерфейс для обертки для чтения/записи какой либо сущности в какое либо хранилище
+ /// </summary>
+ /// <typeparam name="T1">Тип с данными</typeparam>
+ /// <typeparam name="T2">Тип спараметрами</typeparam>
+ public interface I_RW_Service <T1,T2>
+ {
+ T1 Read(T2 param);
+ T1 Read();
+
+ void Write(T1 entity, T2 param);
+ void Write(T1 entity);
+ }
+}
diff --git a/ToolPack1/RW_Tool/RW_Tool.Core/RW_Custom_Service.cs b/ToolPack1/RW_Tool/RW_Tool.Core/RW_Custom_Service.cs
new file mode 100644
index 0000000..88dc210
--- /dev/null
+++ b/ToolPack1/RW_Tool/RW_Tool.Core/RW_Custom_Service.cs
@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using RW_Tool.Core.Abstract;
+
+namespace RW_Tool.Core
+{
+ /// <summary>
+ /// Обертка для чтения/записи какой либо сущности в какое либо хранилище
+ /// с использованием промежуточной сущности T3
+ /// </summary>
+ /// <typeparam name="T1">Тип сущности</typeparam>
+ /// <typeparam name="T2">Параметры</typeparam>
+ /// <typeparam name="T3">Тип сериализуемой сущности</typeparam>
+ public class RW_Custom_Service<T1,T2,T3>:
+ I_RW_Service<T1, T2>
+ where T3 : new()
+ {
+ public T2 DataStorage { protected set; get; }
+ public bool HaveDataStorage => DataStorage != null;
+
+ public ITransformator<T1, T3> Transformator { protected set; get; }
+
+
+ public readonly IReader<T3, T2> Reader;
+ public bool HaveReader => Reader != null;
+
+ public readonly IWriter<T3, T2> Writer;
+ public bool HaveWriter => Writer != null;
+
+
+
+ public RW_Custom_Service(
+ ITransformator<T1, T3> Transformator,
+ IReader<T3, T2> Reader,
+ IWriter<T3, T2> Writer
+ )
+ {
+ this.Transformator = Transformator;
+ this.Reader = Reader;
+ this.Writer = Writer;
+ }
+ public RW_Custom_Service(
+ T2 ds,
+ ITransformator<T1, T3> Transformator,
+ IReader<T3, T2> Reader,
+ IWriter<T3, T2> Writer
+ )
+ {
+ DataStorage = ds;
+ this.Transformator = Transformator;
+ this.Reader = Reader;
+ this.Writer = Writer;
+ }
+
+
+ public T1 Read(T2 param)
+ {
+ if (!HaveReader)
+ throw new Exception();
+
+ T3 serial_entity = Reader.Read(param);
+ return Transformator.ToEntityT1(serial_entity);
+ }
+ public T1 Read() => Read(DataStorage);
+
+ public void Write(T1 entity, T2 param)
+ {
+ if (!HaveWriter)
+ throw new Exception();
+
+ T3 serial_entity = Transformator.ToEntityT2(entity);
+ Writer.Write(serial_entity, param);
+ }
+ public void Write(T1 entity) => Write(entity, DataStorage);
+ }
+}
ToolPack1/RW_Tool/RW_Tool.Core/RW_Service.cs 69(+69 -0)
diff --git a/ToolPack1/RW_Tool/RW_Tool.Core/RW_Service.cs b/ToolPack1/RW_Tool/RW_Tool.Core/RW_Service.cs
new file mode 100644
index 0000000..a2f2958
--- /dev/null
+++ b/ToolPack1/RW_Tool/RW_Tool.Core/RW_Service.cs
@@ -0,0 +1,69 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using RW_Tool.Core.Abstract;
+
+namespace RW_Tool.Core
+{
+ /// <summary>
+ /// Обертка для чтения/записи какой либо сущности в какое либо хранилище
+ /// </summary>
+ /// <typeparam name="T1">Сущность</typeparam>
+ /// <typeparam name="T2">Набор параметров</typeparam>
+ public class RW_Service<T1,T2> :
+ I_RW_Service<T1, T2>
+ {
+ public T2 DataStorage { protected set; get; }
+ public bool HaveDataStorage => DataStorage != null;
+
+ public readonly IReader<T1, T2> Reader;
+ public bool HaveReader => Reader != null;
+
+ public readonly IWriter<T1, T2> Writer;
+ public bool HaveWriter => Writer != null;
+
+
+ public RW_Service(
+ IReader<T1, T2> Reader,
+ IWriter<T1, T2> Writer
+ )
+ {
+ this.Reader = Reader;
+ this.Writer = Writer;
+ }
+ public RW_Service(
+ T2 ds,
+ IReader<T1, T2> Reader,
+ IWriter<T1, T2> Writer
+ )
+ {
+ this.DataStorage = ds;
+ this.Reader = Reader;
+ this.Writer = Writer;
+ }
+
+
+ public T1 Read(T2 param)
+ {
+ if (!HaveReader)
+ throw new Exception();
+
+ return Reader.Read(param);
+ }
+ public T1 Read() => Read(DataStorage);
+
+ public void Write(T1 entity, T2 param)
+ {
+ if (!HaveWriter)
+ throw new Exception();
+
+ Writer.Write(entity, param);
+ }
+ public void Write(T1 entity) => Write(entity, DataStorage);
+
+ }
+
+
+}
diff --git a/ToolPack1/RW_Tool/RW_Tool.Core/RW_Tool.Core.csproj b/ToolPack1/RW_Tool/RW_Tool.Core/RW_Tool.Core.csproj
index 726df92..a1b52ae 100644
--- a/ToolPack1/RW_Tool/RW_Tool.Core/RW_Tool.Core.csproj
+++ b/ToolPack1/RW_Tool/RW_Tool.Core/RW_Tool.Core.csproj
@@ -48,10 +48,10 @@
<Compile Include="Abstract\IReader.cs" />
<Compile Include="Abstract\IWriter.cs" />
<Compile Include="Abstract\ITransformator.cs" />
- <Compile Include="Abstract\I_RW.cs" />
+ <Compile Include="Abstract\I_RW_Service.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="RW.cs" />
- <Compile Include="RW_Custom.cs" />
+ <Compile Include="RW_Service.cs" />
+ <Compile Include="RW_Custom_Service.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
ToolPack1/RW_Tool/RW_Tool.XML_BIN/Factory.cs 23(+12 -11)
diff --git a/ToolPack1/RW_Tool/RW_Tool.XML_BIN/Factory.cs b/ToolPack1/RW_Tool/RW_Tool.XML_BIN/Factory.cs
index 5d180e7..c495421 100644
--- a/ToolPack1/RW_Tool/RW_Tool.XML_BIN/Factory.cs
+++ b/ToolPack1/RW_Tool/RW_Tool.XML_BIN/Factory.cs
@@ -15,7 +15,7 @@ namespace RW_Tool.XML_BIN
public class Factory<T>
where T : class, new()
{
- public RW<T, DS_FileOrStream> GetRW(EnumFormat format, DS_FileOrStream ds = null)
+ public RW_Service<T, DS_FileOrStream> GetRW(EnumFormat format, DS_FileOrStream ds = null)
{
switch (format)
{
@@ -25,20 +25,20 @@ namespace RW_Tool.XML_BIN
default: throw new Exception();
}
}
-
- public RW<T, DS_FileOrStream> GetXMLRW(DS_FileOrStream ds = null)
+
+ public RW_Service<T, DS_FileOrStream> GetXMLRW(DS_FileOrStream ds = null)
=>
- new RW<T, DS_FileOrStream>
+ new RW_Service<T, DS_FileOrStream>
(
ds,
new XML_Reader<T>(),
new XML_Writer<T>()
);
- public RW<T, DS_FileOrStream> GetBinRW(DS_FileOrStream ds = null)
+ public RW_Service<T, DS_FileOrStream> GetBinRW(DS_FileOrStream ds = null)
=>
- new RW<T, DS_FileOrStream>
+ new RW_Service<T, DS_FileOrStream>
(
ds,
new Bin_Reader<T>(),
@@ -51,7 +51,7 @@ namespace RW_Tool.XML_BIN
where T1 : class, new()
where T3 : class, new()
{
- public RW_Custom<T1, DS_FileOrStream, T3> GetRW(EnumFormat format, ITransformator<T1,T3> transformator, DS_FileOrStream ds = null)
+ public RW_Custom_Service<T1, DS_FileOrStream, T3> GetRW(EnumFormat format, ITransformator<T1, T3> transformator, DS_FileOrStream ds = null)
{
switch (format)
{
@@ -63,9 +63,9 @@ namespace RW_Tool.XML_BIN
}
- public RW_Custom<T1, DS_FileOrStream, T3> GetXMLRW(ITransformator<T1, T3> transformator, DS_FileOrStream ds = null)
+ public RW_Custom_Service<T1, DS_FileOrStream, T3> GetXMLRW(ITransformator<T1, T3> transformator, DS_FileOrStream ds = null)
=>
- new RW_Custom<T1, DS_FileOrStream, T3>
+ new RW_Custom_Service<T1, DS_FileOrStream, T3>
(
ds,
transformator,
@@ -73,15 +73,16 @@ namespace RW_Tool.XML_BIN
new XML_Writer<T3>()
);
- public RW_Custom<T1, DS_FileOrStream, T3> GetBinRW(ITransformator<T1, T3> transformator, DS_FileOrStream ds = null)
+ public RW_Custom_Service<T1, DS_FileOrStream, T3> GetBinRW(ITransformator<T1, T3> transformator, DS_FileOrStream ds = null)
=>
- new RW_Custom<T1, DS_FileOrStream, T3>
+ new RW_Custom_Service<T1, DS_FileOrStream, T3>
(
ds,
transformator,
new Bin_Reader<T3>(),
new Bin_Writer<T3>()
);
+
}
}
diff --git a/ToolPack1/Test/Test.ConfigurationTool/ConfigurationTest.cs b/ToolPack1/Test/Test.ConfigurationTool/ConfigurationTest.cs
index 559f727..c1a5f66 100644
--- a/ToolPack1/Test/Test.ConfigurationTool/ConfigurationTest.cs
+++ b/ToolPack1/Test/Test.ConfigurationTool/ConfigurationTest.cs
@@ -31,7 +31,7 @@ namespace Test.ConfigurationTool
conf.Data = Config1.GetConfig_1();
conf.Export();
- if (!conf.Exist())
+ if (!conf.FileExist())
throw new Exception();
conf.Import();
@@ -84,7 +84,7 @@ namespace Test.ConfigurationTool
for (int i = 0; i < 2; i++)
{
- conf.Add(i.ToString(), new Config3()
+ conf.AddAndSave(i.ToString(), new Config3()
{
ID = i,
Name = "name" + i,
diff --git a/ToolPack1/Test/Test.SingletonTool/SingletonTest.cs b/ToolPack1/Test/Test.SingletonTool/SingletonTest.cs
index 41d0770..5785a82 100644
--- a/ToolPack1/Test/Test.SingletonTool/SingletonTest.cs
+++ b/ToolPack1/Test/Test.SingletonTool/SingletonTest.cs
@@ -1,7 +1,8 @@
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
-using Tools.SingletonTool;
+using Tools.SingletonTool.Base;
+using Tools.SingletonTool.Manager;
namespace Test.SingletonTool
{
@@ -27,21 +28,21 @@ namespace Test.SingletonTool
[TestMethod]
public void Test1()
{
- var sing = Signlethon<SingleEntity>.Get();
-
-
+ var sing = new SinglethonManager<SingleEntity>().Get;
}
[TestMethod]
public void Test2()
{
- var sing = SignlethonWithParams<SingleEntity, SingleParams>.Create(new SingleParams()
+ var sing = new SinglethonWithParamsManager<SingleEntity, SingleParams>(new SingleParams()
{
name = "Name"
- });
+ }).Get;
if (sing.Name != "Name")
+ {
throw new Exception();
+ }
}
}
}
ToolPack1/ToolPack1.sln 4(+2 -2)
diff --git a/ToolPack1/ToolPack1.sln b/ToolPack1/ToolPack1.sln
index 64b29e8..cb0b55e 100644
--- a/ToolPack1/ToolPack1.sln
+++ b/ToolPack1/ToolPack1.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.28307.136
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29509.3
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{ABC5281A-6B36-4D11-AFED-3E2EF981AA49}"
EndProject
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/Config/Base/BaseConfigEntity.cs b/ToolPack1/Tools/Tools.ConfigurationTool/Config/Base/BaseConfigEntity.cs
new file mode 100644
index 0000000..31c155d
--- /dev/null
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/Config/Base/BaseConfigEntity.cs
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using System.IO;
+
+using Tools.SingletonTool.Base;
+
+namespace Tools.ConfigurationTool.Config.Base
+{
+
+ internal abstract class BaseConfigEntity<D, P>
+ : IConfigEntity<D>,
+ ISignlethonWithParams<P>
+ where D : class, new()
+ where P : ConfigParams
+ {
+ /// <summary>
+ /// Параметры конфига
+ /// </summary>
+ protected P Params { private set; get; }
+
+ /// <summary>
+ /// Данные, хранимые в конфиге
+ /// </summary>
+ public D Data { set; get; } = new D();
+
+
+ public virtual void SetParams(P param)
+ {
+ Params = param;
+
+ //if (File.Exists(Params.ConfigPath))
+ //{
+ // Import();
+ //}
+ //Export();
+ }
+
+
+
+ protected abstract D Read();
+ protected abstract void Write(D data);
+
+
+ /// <summary>
+ /// Прочитать файл
+ /// </summary>
+ public virtual void Import()
+ {
+ Data = Read();
+ }
+
+ /// <summary>
+ /// Сохранить в файл
+ /// </summary>
+ public virtual void Export()
+ {
+ Write(Data);
+ }
+
+ public bool FileExist() => File.Exists(Params.ConfigPath);
+ public void DeleteFile()
+ {
+ if (FileExist())
+ {
+ File.Delete(Params.ConfigPath);
+ }
+ }
+
+ }
+}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/Config/Base/IConfigEntity.cs b/ToolPack1/Tools/Tools.ConfigurationTool/Config/Base/IConfigEntity.cs
new file mode 100644
index 0000000..fb4a5e5
--- /dev/null
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/Config/Base/IConfigEntity.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Tools.ConfigurationTool.Config.Base
+{
+ internal interface IConfigEntity<D>
+ {
+ D Data { set; get; }
+
+ /// <summary>
+ /// Прочитать файл
+ /// </summary>
+ void Import();
+
+ /// <summary>
+ /// Сохранить в файл
+ /// </summary>
+ void Export();
+
+ bool FileExist();
+ void DeleteFile();
+ }
+}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/Config/ConfigEntity.cs b/ToolPack1/Tools/Tools.ConfigurationTool/Config/ConfigEntity.cs
index 13a0beb..7cc268a 100644
--- a/ToolPack1/Tools/Tools.ConfigurationTool/Config/ConfigEntity.cs
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/Config/ConfigEntity.cs
@@ -6,50 +6,40 @@ using System.Threading.Tasks;
using System.IO;
-using RW_Tool.Core.Abstract;
-using RW_Tool.DataSource.FileOrStream;
-
-using Tools.ConfigurationTool.Serializer;
-using Tools.SingletonTool;
+using Tools.ConfigurationTool.Config.Base;
namespace Tools.ConfigurationTool.Config
{
//Singlethon сущность конфига
- internal class ConfigEntity<T>
- : ISignlethonWithParams<ConfigParams>
+ internal class ConfigEntity<T>
+ : BaseConfigEntity<T, ConfigParams>
where T : class, new()
{
- //Параметры конфига
- internal ConfigParams Params { private set; get; }
-
- //Объект сериализации
- I_RW<T, DS_FileOrStream> Serializer;
-
- //Данные, хранимые в конфиге
- public T Data { set; get; } = new T();
-
- public void SetParams(ConfigParams param)
+ public override void SetParams(ConfigParams param)
{
- Params = param;
-
- Serializer = new SerializerFactory()
- .GetSerializer<T>(Params.ConfigPath, param.Format);
+ base.SetParams(param);
if (File.Exists(Params.ConfigPath))
+ {
Import();
+ }
Export();
}
-
- //Прочитать файл
- public void Import()
+
+ protected override T Read()
{
- Data = Serializer.Read();
+ return Params
+ .RW_Factory
+ .Get_RW<T>(Params.ConfigPath, Params.Format)
+ .Read();
}
- //Сохранить в файл
- public void Export()
+
+ protected override void Write(T data)
{
- Serializer.Write(Data);
+ Params
+ .RW_Factory
+ .Get_RW<T>(Params.ConfigPath, Params.Format)
+ .Write(Data);
}
}
-
}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/Config/ConfigParams.cs b/ToolPack1/Tools/Tools.ConfigurationTool/Config/ConfigParams.cs
index 4de71f6..1e59b59 100644
--- a/ToolPack1/Tools/Tools.ConfigurationTool/Config/ConfigParams.cs
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/Config/ConfigParams.cs
@@ -9,20 +9,35 @@ using System.Windows.Forms;
using RW_Tool.XML_BIN;
+using Tools.ConfigurationTool.Services;
+
namespace Tools.ConfigurationTool.Config
{
//Базовые параметры конфига
public class ConfigParams
{
- //Имя или полный путь к файлу конфигурации
+ //Типо DI
+ public RW_Factory RW_Factory => new RW_Factory();
+
+ /// <summary>
+ /// Имя или полный путь к файлу конфигурации
+ /// </summary>
public string ConfigFile { set; get; }
- //Флаг: испоьзовать ли в пути к файлу путь к .exe приложению
+
+ /// <summary>
+ /// Флаг: испоьзовать ли в пути к файлу путь к .exe приложению
+ /// </summary>
public bool UseApplicationPathPrefix { set; get; } = true;
- //Формат в котором будет храниться конфиг
+ /// <summary>
+ /// Формат в котором будет храниться конфиг
+ /// </summary>
public EnumFormat Format { set; get; } = EnumFormat.XML;
- //Путь по которому выполняются обращению к конфигу
+
+ /// <summary>
+ /// Полный путь по которому выполняются обращению к конфигу
+ /// </summary>
public string ConfigPath => (UseApplicationPathPrefix
?
Path.Combine(Application.StartupPath, ConfigFile)
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/Config/ConfigurationManager.cs b/ToolPack1/Tools/Tools.ConfigurationTool/Config/ConfigurationManager.cs
index 96f3aea..e5f887f 100644
--- a/ToolPack1/Tools/Tools.ConfigurationTool/Config/ConfigurationManager.cs
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/Config/ConfigurationManager.cs
@@ -4,57 +4,70 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using System.IO;
+using Tools.SingletonTool.Manager;
-using Tools.SingletonTool;
+using Tools.ConfigurationTool.Config.Base;
namespace Tools.ConfigurationTool.Config
-{
- //Обеспечивате доступ к конфигу
- public sealed class ConfigurationManager<T>
+{
+ /// <summary>
+ /// Обеспечивает доступ к конфигу
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ public class ConfigurationManager<T>
where T: class, new()
{
- //Конфиг
- private ConfigEntity<T> Config => SignlethonWithParams<ConfigEntity<T>, ConfigParams>.Get();
+ private SinglethonWithParamsManager<ConfigEntity<T>, ConfigParams> SinglethonManager;
+
+ internal virtual IConfigEntity<T> ConfigEntity => SinglethonManager.Get;
+
//Данные конфига
public T Data
{
- set => Config.Data = value;
- get => Config.Data;
+ set => ConfigEntity.Data = value;
+ get => ConfigEntity.Data;
}
//При первом обращении необходимо использовать данный конструктор для иницилизации параметров конфига
public ConfigurationManager(ConfigParams param)
{
- if (!SignlethonWithParams<ConfigEntity<T>, ConfigParams>.ExistInstance)
- SignlethonWithParams<ConfigEntity<T>, ConfigParams>.Create(param);
+ SinglethonManager =
+ new SinglethonWithParamsManager<ConfigEntity<T>, ConfigParams>(param);
}
//Для повторных обращений к конфигу
public ConfigurationManager()
{
- if (!SignlethonWithParams<ConfigEntity<T>, ConfigParams>.ExistInstance)
- throw new Exception("Use ConfigurationManager(ConfigParams param) first");
+ SinglethonManager =
+ new SinglethonWithParamsManager<ConfigEntity<T>, ConfigParams>();
}
- //Прочитать из файла
+ /// <summary>
+ /// Прочитать из файла
+ /// </summary>
public void Import()
{
- Config.Import();
+ ConfigEntity.Import();
}
- //Сохранить в файл
+ /// <summary>
+ /// Сохранить в файл
+ /// </summary>
public void Export()
{
- Config.Export();
+ ConfigEntity.Export();
}
- public bool Exist() => File.Exists(Config.Params.ConfigPath);
+
+ public bool FileExist()
+ {
+ return ConfigEntity.FileExist();
+ }
public void Delete()
{
- if (Exist())
- File.Delete(Config.Params.ConfigPath);
+ ConfigEntity.DeleteFile();
}
+
}
}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/Config/Custom/ConfigEntity.cs b/ToolPack1/Tools/Tools.ConfigurationTool/Config/Custom/ConfigEntity.cs
index c739c1f..f814b9f 100644
--- a/ToolPack1/Tools/Tools.ConfigurationTool/Config/Custom/ConfigEntity.cs
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/Config/Custom/ConfigEntity.cs
@@ -6,55 +6,41 @@ using System.Threading.Tasks;
using System.IO;
-using RW_Tool.Core.Abstract;
-using RW_Tool.DataSource.FileOrStream;
-
-using Tools.ConfigurationTool.Serializer;
-using Tools.SingletonTool;
+using Tools.ConfigurationTool.Config.Base;
namespace Tools.ConfigurationTool.Config.Custom
{
internal class ConfigEntity<T1, T2>
- : ISignlethonWithParams<ConfigParams<T1, T2>>
+ : BaseConfigEntity<T1, ConfigParams<T1, T2>>
where T1 : class, new()
where T2 : class, new()
{
- //Параметры конфига
- public ConfigParams<T1, T2> Params { private set; get; }
-
- //Объект сериализации
- I_RW<T1, DS_FileOrStream> Serializer;
-
-
- //Данные, хранимые в конфиге
- public T1 Data { set; get; } = new T1();
-
- public void SetParams(ConfigParams<T1, T2> param)
+ public override void SetParams(ConfigParams<T1, T2> param)
{
- Params = param;
-
- Serializer = new SerializerFactory()
- .GetSerializer_Custon<T1, T2>(
- param.ConfigPath,
- param.Format,
- param.Transformator
- );
+ base.SetParams(param);
if (File.Exists(Params.ConfigPath))
+ {
Import();
+ }
Export();
}
- //Прочитать файл
- public void Import()
+ protected override T1 Read()
{
- Data = Serializer.Read();
+ return Params
+ .RW_Factory
+ .Get_RW<T1, T2>(Params.ConfigPath, Params.Format, Params.Transformator)
+ .Read();
}
- //Сохранить в файл
- public void Export()
+
+ protected override void Write(T1 data)
{
- Serializer.Write(Data);
+ Params
+ .RW_Factory
+ .Get_RW<T1, T2>(Params.ConfigPath, Params.Format, Params.Transformator)
+ .Write(data);
}
}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/Config/Custom/ConfigParams.cs b/ToolPack1/Tools/Tools.ConfigurationTool/Config/Custom/ConfigParams.cs
index 56e1798..4ec586b 100644
--- a/ToolPack1/Tools/Tools.ConfigurationTool/Config/Custom/ConfigParams.cs
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/Config/Custom/ConfigParams.cs
@@ -4,39 +4,20 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using System.IO;
-using System.Windows.Forms;
-
using RW_Tool.Core.Abstract;
-using RW_Tool.XML_BIN;
namespace Tools.ConfigurationTool.Config.Custom
{
- public class ConfigParams<T1, T2>
+ public class ConfigParams<T1, T2> : ConfigParams
{
- //Имя или полный путь к файлу конфигурации
- public string ConfigFile { set; get; }
- //Флаг: испоьзовать ли в пути к файлу путь к .exe приложению
- public bool UseApplicationPathPrefix { set; get; } = true;
-
- //Формат в котором будет храниться конфиг
- public EnumFormat Format { set; get; } = EnumFormat.XML;
-
- //Трансформатор для преобразования формата из T1 в T2
+ /// <summary>
+ /// Трансформатор для преобразования формата из T1 в T2 при чтении/записи
+ /// </summary>
public ITransformator<T1, T2> Transformator { set; get; }
- //Путь по которому выполняются обращению к конфигу
- public string ConfigPath => (UseApplicationPathPrefix
- ?
- Path.Combine(Application.StartupPath, ConfigFile)
- :
- ConfigFile
- );
-
- public ConfigParams(string ConfigFile, ITransformator<T1, T2> Transformator)
+ public ConfigParams(string ConfigFile, ITransformator<T1, T2> Transformator) : base(ConfigFile)
{
- this.ConfigFile = ConfigFile;
this.Transformator = Transformator;
}
}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/Config/Custom/ConfigurationManager.cs b/ToolPack1/Tools/Tools.ConfigurationTool/Config/Custom/ConfigurationManager.cs
index ade5675..a1f809b 100644
--- a/ToolPack1/Tools/Tools.ConfigurationTool/Config/Custom/ConfigurationManager.cs
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/Config/Custom/ConfigurationManager.cs
@@ -4,57 +4,33 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using System.IO;
-
-using Tools.SingletonTool;
+using Tools.SingletonTool.Manager;
+using Tools.ConfigurationTool.Config.Base;
namespace Tools.ConfigurationTool.Config.Custom
{
//Обеспечивате доступ к конфигу
- public sealed class ConfigurationManager<T1, T2>
+ public sealed class ConfigurationManager<T1, T2> : ConfigurationManager<T1>
where T1: class, new()
where T2 : class, new()
{
- //Конфиг
- private ConfigEntity<T1, T2> Config => SignlethonWithParams<ConfigEntity<T1, T2>, ConfigParams<T1, T2>>.Get();
- //Данные конфига
- public T1 Data
- {
- set => Config.Data = value;
- get => Config.Data;
- }
+ private readonly SinglethonWithParamsManager<ConfigEntity<T1, T2>, ConfigParams<T1, T2>> SinglethonManager
+ = new SinglethonWithParamsManager<ConfigEntity<T1, T2>, ConfigParams<T1, T2>>();
+
+ internal override IConfigEntity<T1> ConfigEntity => SinglethonManager.Get;
//При первом обращении необходимо использовать данный конструктор для иницилизации параметров конфига
public ConfigurationManager(ConfigParams<T1,T2> param)
{
- if (!SignlethonWithParams<ConfigEntity<T1,T2>, ConfigParams<T1,T2>>.ExistInstance)
- SignlethonWithParams<ConfigEntity<T1,T2>, ConfigParams<T1, T2>>.Create(param);
+ SinglethonManager
+ = new SinglethonWithParamsManager<ConfigEntity<T1, T2>, ConfigParams<T1, T2>>(param);
}
//Для повторных обращений к конфигу
public ConfigurationManager()
{
- if (!SignlethonWithParams<ConfigEntity<T1>, ConfigParams>.ExistInstance)
- throw new Exception("Use ConfigurationManager(ConfigParams param) first");
- }
-
-
- //Прочитать из файла
- public void Import()
- {
- Config.Import();
- }
- //Сохранить в файл
- public void Export()
- {
- Config.Export();
- }
-
- public bool Exist() => File.Exists(Config.Params.ConfigPath);
- public void Delete()
- {
- if (Exist())
- File.Delete(Config.Params.ConfigPath);
+ SinglethonManager
+ = new SinglethonWithParamsManager<ConfigEntity<T1, T2>, ConfigParams<T1, T2>>();
}
}
}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Base/BaseMConfigEntity.cs b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Base/BaseMConfigEntity.cs
new file mode 100644
index 0000000..f2f3ab8
--- /dev/null
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Base/BaseMConfigEntity.cs
@@ -0,0 +1,114 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using System.IO;
+
+using Tools.SingletonTool.Base;
+
+namespace Tools.ConfigurationTool.ConfigMultiple.Base
+{
+ public abstract class BaseMConfigEntity<D, P>
+ : IMConfigEntity<D>,
+ ISignlethonWithParams<P>
+ where P : MConfigParams
+ {
+ //Параметры конфига
+ public P Params { private set; get; }
+
+ //Данные, хранимые в конфиге
+ public Dictionary<string, D> Data { set; get; } = new Dictionary<string, D>();
+
+
+ public virtual void SetParams(P param)
+ {
+ Params = param;
+ }
+
+
+ protected abstract D Read(string path);
+ protected abstract void Write(D data, string key);
+
+
+ public virtual void Export(string key)
+ {
+ Write(Data[key], key);
+ }
+ public virtual void ExportAll()
+ {
+ DirectoryInfo dir = Params.ConfigDirectoryInfo;
+
+ if (Params.RecreateDirectory)
+ {
+ if (dir.Exists)
+ {
+ dir.Delete(true);
+ }
+ }
+ dir.Refresh();
+ if (!dir.Exists)
+ {
+ dir.Create();
+ }
+
+ foreach (var elem in Data)
+ {
+ Export(elem.Key);
+ }
+ }
+
+ public virtual void Import(string path)
+ {
+ Data.Add(
+ Path.GetFileNameWithoutExtension(Path.GetFileName(path)),
+ Read(path)
+ );
+ }
+ public virtual void ImportAll()
+ {
+ DirectoryInfo dir = Params.ConfigDirectoryInfo;
+
+ if (!dir.Exists)
+ {
+ dir.Create();
+ return;
+ }
+
+ var data = dir.GetFiles();
+
+ foreach (var elem in data)
+ {
+ Import(elem.FullName);
+ }
+ }
+
+
+ public void AddAndSave(string key, D value)
+ {
+ Data.Add(key, value);
+ Export(key);
+ }
+ public void RemoveAndSave(string key)
+ {
+ Data.Remove(key);
+ var path = Params.GetPathForFile(key);
+ if (File.Exists(path))
+ {
+ File.Delete(path);
+ }
+ }
+
+
+ public void DeleteDirectory()
+ {
+ var dir = Params.ConfigDirectoryInfo;
+
+ if (dir.Exists)
+ {
+ dir.Delete(true);
+ }
+ }
+
+ }
+}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Base/IMConfigEntity.cs b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Base/IMConfigEntity.cs
new file mode 100644
index 0000000..b20d26d
--- /dev/null
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Base/IMConfigEntity.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Tools.ConfigurationTool.ConfigMultiple.Base
+{
+ internal interface IMConfigEntity<D>
+ {
+ Dictionary<string, D> Data { set; get; }
+
+
+ /// <summary>
+ /// Сохранить в папку конфига указанную запись
+ /// </summary>
+ /// <param name="key">ключ</param>
+ void Export(string key);
+ /// <summary>
+ /// Очистить папку и сохранить
+ /// </summary>
+ void ExportAll();
+
+ /// <summary>
+ /// Прочитать запись по указанному пути (key - имя файла)
+ /// </summary>
+ /// <param name="path"></param>
+ void Import(string path);
+ /// <summary>
+ /// Прочитать все значения из папк конфигурации
+ /// </summary>
+ void ImportAll();
+
+
+ /// <summary>
+ /// Добавить значение в конфиг и сохранить в папку
+ /// </summary>
+ /// <param name="key">ключ</param>
+ /// <param name="value">запись</param>
+ void AddAndSave(string key, D value);
+ /// <summary>
+ /// Удалить значение из конфига и из папки
+ /// </summary>
+ /// <param name="key">ключ</param>
+ void RemoveAndSave(string key);
+
+
+ void DeleteDirectory();
+ }
+}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Custom/MConfigEntity.cs b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Custom/MConfigEntity.cs
index 3471b8e..a1e826d 100644
--- a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Custom/MConfigEntity.cs
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Custom/MConfigEntity.cs
@@ -4,101 +4,28 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using System.IO;
-
-using RW_Tool.Core.Abstract;
-using RW_Tool.DataSource.FileOrStream;
-
-using Tools.ConfigurationTool.Serializer;
-using Tools.SingletonTool;
+using Tools.ConfigurationTool.ConfigMultiple.Base;
namespace Tools.ConfigurationTool.ConfigMultiple.Custom
{
//Singlethon сущность конфига
public class MConfigEntity<T1, T2>
- : ISignlethonWithParams<MConfigParams<T1,T2>>
+ : BaseMConfigEntity<T1, MConfigParams<T1, T2>>
where T1 : class, new()
where T2 : class, new()
{
- //Параметры конфига
- public MConfigParams<T1,T2> Params { private set; get; }
-
- //Объект сериализации
- I_RW<T1, DS_FileOrStream> Serializer;
-
- //Данные, хранимые в конфиге
- public Dictionary<string, T1> Data { set; get; } = new Dictionary<string, T1>();
-
-
- public void SetParams(MConfigParams<T1,T2> param)
- {
- Params = param;
-
- Serializer = new SerializerFactory()
- .GetSerializer_Custon<T1,T2>(
- Params.ConfigDirectoryPath,
- param.Format,
- param.Transformator
- );
-
-
-
- if (Directory.Exists(Params.ConfigDirectoryPath))
- ImportAll();
- ExportAll();
- }
-
-
-
-
-
- public void Export(string key)
+ protected override T1 Read(string path)
{
- Serializer.Write(
- Data[key],
- new DS_File(Params.GetPathForFile(key))
- );
+ return Params.RW_Factory
+ .Get_RW<T1, T2>(path, Params.Format, Params.Transformator)
+ .Read();
}
- public void ExportAll()
- {
- DirectoryInfo dir = Params.ConfigDirectoryInfo;
-
- if (Params.RecreateDirectory)
- {
- if (dir.Exists)
- dir.Delete(true);
- }
- dir.Refresh();
- if (!dir.Exists)
- dir.Create();
- foreach (var elem in Data)
- Export(elem.Key);
- }
-
- public void Import(string path)
- {
- Data.Add(
- Path.GetFileNameWithoutExtension(Path.GetFileName(path)),
- Serializer.Read(new DS_File(path))
- );
- }
- public void ImportAll()
+ protected override void Write(T1 data, string key)
{
- DirectoryInfo dir = Params.ConfigDirectoryInfo;
-
- if (!dir.Exists)
- {
- dir.Create();
- return;
- }
-
- var data = dir.GetFiles();
-
- foreach (var elem in data)
- {
- Import(elem.FullName);
- }
+ Params.RW_Factory
+ .Get_RW<T1, T2>(Params.GetPathForFile(key), Params.Format, Params.Transformator)
+ .Write(data);
}
}
}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Custom/MConfigParams.cs b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Custom/MConfigParams.cs
index b93ab5c..76af8f5 100644
--- a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Custom/MConfigParams.cs
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Custom/MConfigParams.cs
@@ -4,48 +4,19 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using System.IO;
-using System.Windows.Forms;
-
using RW_Tool.Core.Abstract;
-using RW_Tool.XML_BIN;
namespace Tools.ConfigurationTool.ConfigMultiple.Custom
{
//Базовые параметры конфига
- public class MConfigParams<T1,T2>
+ public class MConfigParams<T1,T2>
+ : MConfigParams
{
- //Папка, в которой будут храниться конфиги
- public string ConfigDirectory { set; get; }
- //Флаг: испоьзовать ли в пути к файлу путь к .exe приложению
- public bool UseApplicationPathPrefix { set; get; } = true;
-
- //Формат в котором будет храниться конфиг
- public EnumFormat Format { set; get; } = EnumFormat.XML;
-
public ITransformator<T1, T2> Transformator { set; get; }
- //Пересоздавать папку при общем сохранении
- public bool RecreateDirectory { set; get; } = true;
-
- //Полный путь к конфигу
- public string ConfigDirectoryPath => (UseApplicationPathPrefix
- ?
- Path.Combine(Application.StartupPath, ConfigDirectory)
- :
- ConfigDirectory
- );
- public DirectoryInfo ConfigDirectoryInfo => new DirectoryInfo(ConfigDirectoryPath);
-
- public string GetPathForFile(string key) =>
- Path.Combine(ConfigDirectoryPath, key +
- (Format == EnumFormat.XML ? ".xml" : ".bin")
- );
-
- public MConfigParams(string ConfigDirectory, ITransformator<T1, T2> Transformator)
+ public MConfigParams(string ConfigDirectory, ITransformator<T1, T2> Transformator) : base(ConfigDirectory)
{
- this.ConfigDirectory = ConfigDirectory;
this.Transformator = Transformator;
}
}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Custom/MConfigurationManager.cs b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Custom/MConfigurationManager.cs
index d784ded..88d6b18 100644
--- a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Custom/MConfigurationManager.cs
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/Custom/MConfigurationManager.cs
@@ -4,71 +4,36 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using System.IO;
+using Tools.SingletonTool.Manager;
-using Tools.SingletonTool;
+using Tools.ConfigurationTool.ConfigMultiple.Base;
namespace Tools.ConfigurationTool.ConfigMultiple.Custom
{
//Обеспечивате доступ к конфигу
- public sealed class MConfigurationManager<T1, T2>
+ public class MConfigurationManager<T1, T2>
+ : MConfigurationManager<T1>
where T1: class, new()
where T2 : class, new()
{
- //Конфиг
- private MConfigEntity<T1, T2> Config => SignlethonWithParams<MConfigEntity<T1, T2>, MConfigParams<T1, T2>>.Get();
- //Данные конфига
- public Dictionary<string, T1> Data
- {
- set => Config.Data = value;
- get => Config.Data;
- }
+ private readonly SinglethonWithParamsManager<MConfigEntity<T1, T2>, MConfigParams<T1, T2>> SinglethonManager;
+
+ internal override IMConfigEntity<T1> ConfigEntity => SinglethonManager.Get;
+
//При первом обращении необходимо использовать данный конструктор для иницилизации параметров конфига
public MConfigurationManager(MConfigParams<T1, T2> param)
{
- if (!SignlethonWithParams<MConfigEntity<T1,T2>, MConfigParams<T1,T2>>.ExistInstance)
- SignlethonWithParams<MConfigEntity<T1, T2>, MConfigParams<T1, T2>>.Create(param);
+ SinglethonManager
+ = new SinglethonWithParamsManager<MConfigEntity<T1, T2>, MConfigParams<T1, T2>>(param);
}
//Для повторных обращений к конфигу
public MConfigurationManager()
{
- if (!SignlethonWithParams<MConfigEntity<T1, T2>, MConfigParams<T1, T2>>.ExistInstance)
- throw new Exception("Use ConfigurationManager(ConfigParams param) first");
- }
-
-
- public void Add(string key, T1 value)
- {
- Data.Add(key, value);
- Config.Export(key);
- }
- public void Remove(string key)
- {
- Data.Remove(key);
- var path = Config.Params.GetPathForFile(key);
- if (File.Exists(path))
- File.Delete(path);
+ SinglethonManager
+ = new SinglethonWithParamsManager<MConfigEntity<T1, T2>, MConfigParams<T1, T2>>();
}
- //Прочитать из файла
- public void Import()
- {
- Config.ImportAll();
- }
- //Сохранить в файл
- public void Export()
- {
- Config.ExportAll();
- }
-
- public void Delete()
- {
- var dir = Config.Params.ConfigDirectoryInfo;
-
- if (dir.Exists)
- dir.Delete(true);
- }
}
}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/MConfigEntity.cs b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/MConfigEntity.cs
index 4b14e26..fa7e54d 100644
--- a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/MConfigEntity.cs
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/MConfigEntity.cs
@@ -6,93 +6,39 @@ using System.Threading.Tasks;
using System.IO;
-using RW_Tool.Core.Abstract;
-using RW_Tool.DataSource.FileOrStream;
-
-using Tools.ConfigurationTool.Serializer;
-using Tools.SingletonTool;
+using Tools.ConfigurationTool.ConfigMultiple.Base;
namespace Tools.ConfigurationTool.ConfigMultiple
{
//Singlethon сущность конфига
- public class MConfigEntity<T>
- : ISignlethonWithParams<MConfigParams>
+ internal class MConfigEntity<T>
+ : BaseMConfigEntity<T, MConfigParams>
where T : class, new()
{
- //Параметры конфига
- public MConfigParams Params { private set; get; }
-
- //Объект сериализации
- I_RW<T, DS_FileOrStream> Serializer;
-
- //Данные, хранимые в конфиге
- public Dictionary<string, T> Data { set; get; } = new Dictionary<string, T>();
-
- public void SetParams(MConfigParams param)
+ public override void SetParams(MConfigParams param)
{
- Params = param;
-
- Serializer = new SerializerFactory()
- .GetSerializer<T>(
- param.ConfigDirectoryPath,
- param.Format
- );
+ base.SetParams(param);
if (Directory.Exists(Params.ConfigDirectoryPath))
+ {
ImportAll();
+ }
ExportAll();
}
-
- public void Export(string key)
- {
- Serializer.Write(
- Data[key],
- new DS_File(Params.GetPathForFile(key))
- );
- }
- public void ExportAll()
+ protected override T Read(string path)
{
- DirectoryInfo dir = Params.ConfigDirectoryInfo;
-
- if (Params.RecreateDirectory)
- {
- if (dir.Exists)
- dir.Delete(true);
- }
- dir.Refresh();
- if (!dir.Exists)
- dir.Create();
-
- foreach (var elem in Data)
- Export(elem.Key);
+ return Params.RW_Factory
+ .Get_RW<T>(path, Params.Format)
+ .Read();
}
- public void Import(string path)
- {
- Data.Add(
- Path.GetFileNameWithoutExtension(Path.GetFileName(path)),
- Serializer.Read(new DS_File(path))
- );
- }
- public void ImportAll()
+ protected override void Write(T data, string key)
{
- DirectoryInfo dir = Params.ConfigDirectoryInfo;
-
- if (!dir.Exists)
- {
- dir.Create();
- return;
- }
-
- var data = dir.GetFiles();
-
- foreach (var elem in data)
- {
- Import(elem.FullName);
- }
+ Params.RW_Factory
+ .Get_RW<T>(Params.GetPathForFile(key), Params.Format)
+ .Write(data);
}
-
}
}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/MConfigParams.cs b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/MConfigParams.cs
index 30cf5ae..41c7a08 100644
--- a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/MConfigParams.cs
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/MConfigParams.cs
@@ -7,14 +7,18 @@ using System.Threading.Tasks;
using System.IO;
using System.Windows.Forms;
-using RW_Tool.Core.Abstract;
using RW_Tool.XML_BIN;
+using Tools.ConfigurationTool.Services;
+
namespace Tools.ConfigurationTool.ConfigMultiple
{
//Базовые параметры конфига
public class MConfigParams
{
+ public RW_Factory RW_Factory => new RW_Factory();
+
+
//Папка, в которой будут храниться конфиги
public string ConfigDirectory { set; get; }
//Флаг: испоьзовать ли в пути к файлу путь к .exe приложению
@@ -36,10 +40,18 @@ namespace Tools.ConfigurationTool.ConfigMultiple
public DirectoryInfo ConfigDirectoryInfo => new DirectoryInfo(ConfigDirectoryPath);
- public string GetPathForFile(string key) =>
- Path.Combine(ConfigDirectoryPath, key +
- (Format == EnumFormat.XML ? ".xml" : ".bin")
- );
+ public string GetPathForFile(string key)
+ {
+ switch (Format)
+ {
+ case EnumFormat.XML:
+ return Path.Combine(ConfigDirectoryPath, key + ".xml");
+ case EnumFormat.Bin:
+ return Path.Combine(ConfigDirectoryPath, key + ".bin");
+ }
+
+ return Path.Combine(ConfigDirectoryPath, key + ".NoFormate");
+ }
public MConfigParams(string ConfigDirectory)
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/MConfigurationManager.cs b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/MConfigurationManager.cs
index 651a99f..1266461 100644
--- a/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/MConfigurationManager.cs
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/ConfigMultiple/MConfigurationManager.cs
@@ -4,70 +4,67 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using System.IO;
+using Tools.SingletonTool.Manager;
-using Tools.SingletonTool;
+using Tools.ConfigurationTool.ConfigMultiple.Base;
namespace Tools.ConfigurationTool.ConfigMultiple
{
//Обеспечивате доступ к конфигу
- public sealed class MConfigurationManager<T>
+ public class MConfigurationManager<T>
where T: class, new()
{
+ private readonly SinglethonWithParamsManager<MConfigEntity<T>, MConfigParams> SinglethonManager;
+
//Конфиг
- private MConfigEntity<T> Config => SignlethonWithParams<MConfigEntity<T>, MConfigParams>.Get();
- //Данные конфига
+ internal virtual IMConfigEntity<T> ConfigEntity => SinglethonManager.Get;
+
public Dictionary<string, T> Data
{
- set => Config.Data = value;
- get => Config.Data;
+ set => ConfigEntity.Data = value;
+ get => ConfigEntity.Data;
}
//При первом обращении необходимо использовать данный конструктор для иницилизации параметров конфига
public MConfigurationManager(MConfigParams param)
{
- if (!SignlethonWithParams<MConfigEntity<T>, MConfigParams>.ExistInstance)
- SignlethonWithParams<MConfigEntity<T>, MConfigParams>.Create(param);
+ SinglethonManager
+ = new SinglethonWithParamsManager<MConfigEntity<T>, MConfigParams>(param);
}
//Для повторных обращений к конфигу
public MConfigurationManager()
{
- if (!SignlethonWithParams<MConfigEntity<T>, MConfigParams>.ExistInstance)
- throw new Exception("Use ConfigurationManager(ConfigParams param) first");
+ SinglethonManager
+ = new SinglethonWithParamsManager<MConfigEntity<T>, MConfigParams>();
}
- public void Add(string key, T value)
+ public void AddAndSave(string key, T value)
{
- Data.Add(key, value);
- Config.Export(key);
+ ConfigEntity.AddAndSave(key, value);
}
- public void Remove(string key)
+ public void RemoveAndSave(string key)
{
- Data.Remove(key);
- var path = Config.Params.GetPathForFile(key);
- if (File.Exists(path))
- File.Delete(path);
+ ConfigEntity.RemoveAndSave(key);
}
+
//Прочитать из файла
public void Import()
{
- Config.ImportAll();
+ ConfigEntity.ImportAll();
}
//Сохранить в файл
public void Export()
{
- Config.ExportAll();
+ ConfigEntity.ExportAll();
}
public void Delete()
{
- var dir = Config.Params.ConfigDirectoryInfo;
-
- if (dir.Exists)
- dir.Delete(true);
+ ConfigEntity.DeleteDirectory();
}
+
}
}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/Services/RW_Factory.cs b/ToolPack1/Tools/Tools.ConfigurationTool/Services/RW_Factory.cs
new file mode 100644
index 0000000..8da15e4
--- /dev/null
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/Services/RW_Factory.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using RW_Tool.Core.Abstract;
+using RW_Tool.DataSource.FileOrStream;
+using RW_Tool.XML_BIN;
+
+namespace Tools.ConfigurationTool.Services
+{
+ public class RW_Factory
+ {
+ /// <summary>
+ /// Получить сервис чтения/записи
+ /// </summary>
+ /// <typeparam name="T">Тип для приложения и для хранения</typeparam>
+ public I_RW_Service<T, DS_FileOrStream> Get_RW<T>(string file, EnumFormat format)
+ where T : class, new()
+ => new Factory<T>().GetRW(format, new DS_File(file));
+
+
+ /// <summary>
+ /// Получить сервис чтения/записи
+ /// </summary>
+ /// <typeparam name="T1">Тип для приложения</typeparam>
+ /// <typeparam name="T3">Тип для хранения</typeparam>
+ /// <param name="transformator">Преобразователь для чтени/записи</param>
+ public I_RW_Service<T1, DS_FileOrStream> Get_RW<T1, T3>(string file, EnumFormat format, ITransformator<T1, T3> transformator)
+ where T1 : class, new()
+ where T3 : class, new()
+ => new Factory<T1, T3>().GetRW(format, transformator, new DS_File(file));
+
+ }
+}
diff --git a/ToolPack1/Tools/Tools.ConfigurationTool/Tools.ConfigurationTool.csproj b/ToolPack1/Tools/Tools.ConfigurationTool/Tools.ConfigurationTool.csproj
index 1ce3ee4..908b8a2 100644
--- a/ToolPack1/Tools/Tools.ConfigurationTool/Tools.ConfigurationTool.csproj
+++ b/ToolPack1/Tools/Tools.ConfigurationTool/Tools.ConfigurationTool.csproj
@@ -41,12 +41,16 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
+ <Compile Include="ConfigMultiple\Base\IMConfigEntity.cs" />
+ <Compile Include="Config\Base\BaseConfigEntity.cs" />
+ <Compile Include="ConfigMultiple\Base\BaseMConfigEntity.cs" />
<Compile Include="ConfigMultiple\Custom\MConfigEntity.cs" />
<Compile Include="ConfigMultiple\Custom\MConfigParams.cs" />
<Compile Include="ConfigMultiple\Custom\MConfigurationManager.cs" />
<Compile Include="ConfigMultiple\MConfigEntity.cs" />
<Compile Include="ConfigMultiple\MConfigParams.cs" />
<Compile Include="ConfigMultiple\MConfigurationManager.cs" />
+ <Compile Include="Config\Base\IConfigEntity.cs" />
<Compile Include="Config\ConfigEntity.cs" />
<Compile Include="Config\ConfigParams.cs" />
<Compile Include="Config\ConfigurationManager.cs" />
@@ -54,7 +58,7 @@
<Compile Include="Config\Custom\ConfigParams.cs" />
<Compile Include="Config\Custom\ConfigurationManager.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="Serializer\SerializerFactory.cs" />
+ <Compile Include="Services\RW_Factory.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\RW_Tool\RW_Tool.Core\RW_Tool.Core.csproj">
@@ -74,5 +78,6 @@
<Name>Tools.SingletonTool</Name>
</ProjectReference>
</ItemGroup>
+ <ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
diff --git a/ToolPack1/Tools/Tools.SingletonTool/Base/ISignlethonManager.cs b/ToolPack1/Tools/Tools.SingletonTool/Base/ISignlethonManager.cs
new file mode 100644
index 0000000..6ea602f
--- /dev/null
+++ b/ToolPack1/Tools/Tools.SingletonTool/Base/ISignlethonManager.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Tools.SingletonTool.Base
+{
+
+ /// <summary>
+ /// Обертка над статичным классом
+ /// </summary>
+ /// <typeparam name="T">Тип синглтон</typeparam>
+ public interface ISignlethonManager<T>
+ where T : class, new()
+ {
+ /// <summary>
+ /// Получить экземпляр
+ /// </summary>
+ T Get { get; }
+
+ /// <summary>
+ /// Создан ли экземпляр
+ /// </summary>
+ bool ExistInstance { get; }
+ }
+}
diff --git a/ToolPack1/Tools/Tools.SingletonTool/Base/ISignlethonWithParams.cs b/ToolPack1/Tools/Tools.SingletonTool/Base/ISignlethonWithParams.cs
new file mode 100644
index 0000000..d6608bd
--- /dev/null
+++ b/ToolPack1/Tools/Tools.SingletonTool/Base/ISignlethonWithParams.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Tools.SingletonTool.Base
+{
+ /// <summary>
+ /// Класс выступающий в роли синглтона с параметрами должен реализовать данный интерфейс
+ /// </summary>
+ /// <typeparam name="P">Тип параметра для создания экземпляра</typeparam>
+ public interface ISignlethonWithParams<in P>
+ {
+ /// <summary>
+ /// Вместо конструктору с параметром для синглтона
+ /// </summary>
+ void SetParams(P param);
+
+ }
+}
diff --git a/ToolPack1/Tools/Tools.SingletonTool/Manager/SinglethonManager.cs b/ToolPack1/Tools/Tools.SingletonTool/Manager/SinglethonManager.cs
new file mode 100644
index 0000000..0b9dc59
--- /dev/null
+++ b/ToolPack1/Tools/Tools.SingletonTool/Manager/SinglethonManager.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using Tools.SingletonTool.Base;
+
+namespace Tools.SingletonTool.Manager
+{
+ /// <summary>
+ /// Синглтон
+ /// </summary>
+ /// <typeparam name="T">Тип синглот</typeparam>
+ public class SinglethonManager<T>
+ : ISignlethonManager<T>
+ where T : class, new()
+ {
+ private static readonly Lazy<T> Single
+ = new Lazy<T>(() => {
+ return new T();
+ },
+ true);
+
+
+ public T Get
+ => Single.Value;
+
+ public bool ExistInstance
+ => Single.IsValueCreated;
+
+ }
+}
diff --git a/ToolPack1/Tools/Tools.SingletonTool/Manager/SinglethonWithParamsManager.cs b/ToolPack1/Tools/Tools.SingletonTool/Manager/SinglethonWithParamsManager.cs
new file mode 100644
index 0000000..21ea10a
--- /dev/null
+++ b/ToolPack1/Tools/Tools.SingletonTool/Manager/SinglethonWithParamsManager.cs
@@ -0,0 +1,64 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using Tools.SingletonTool.Base;
+
+
+namespace Tools.SingletonTool.Manager
+{
+ /// <summary>
+ /// Синглтон с параметром создания
+ /// </summary>
+ /// <typeparam name="T">Тип синглот</typeparam>
+ /// <typeparam name="P">Тип параметра</typeparam>
+ public class SinglethonWithParamsManager<T, P>
+ : ISignlethonManager<T>
+ where T : class, ISignlethonWithParams<P>, new()
+ {
+ private static P Param;
+ private static bool IsParamSet = false;
+
+ private static readonly Lazy<T> Single
+ = new Lazy<T>(() => {
+ if (!IsParamSet)
+ {
+ throw new Exception("Instance not create. Use SignlethonWithParamsManager(P param) first");
+ }
+
+ T single = new T();
+ single.SetParams(Param);
+ Param = default(P);
+
+ return single;
+ },
+ true);
+
+
+ public SinglethonWithParamsManager()
+ {
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ /// <param name="param">Параметры для создания экземпляра. Not null</param>
+ public SinglethonWithParamsManager(P param)
+ {
+ //Возможно добавить синхронность
+ if (!IsParamSet)
+ {
+ Param = param;
+ IsParamSet = true;
+ }
+ }
+
+ public T Get
+ => Single.Value;
+
+ public bool ExistInstance
+ => Single.IsValueCreated;
+
+ }
+}
diff --git a/ToolPack1/Tools/Tools.SingletonTool/Tools.SingletonTool.csproj b/ToolPack1/Tools/Tools.SingletonTool/Tools.SingletonTool.csproj
index 35a957e..41e99c5 100644
--- a/ToolPack1/Tools/Tools.SingletonTool/Tools.SingletonTool.csproj
+++ b/ToolPack1/Tools/Tools.SingletonTool/Tools.SingletonTool.csproj
@@ -40,9 +40,11 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
+ <Compile Include="Base\ISignlethonManager.cs" />
+ <Compile Include="Base\ISignlethonWithParams.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
- <Compile Include="Signlethon.cs" />
- <Compile Include="SignlethonWithParams.cs" />
+ <Compile Include="Manager\SinglethonWithParamsManager.cs" />
+ <Compile Include="Manager\SinglethonManager.cs" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file