ToolPack1
Changes
ToolPack1/Console/Program.cs 120(+72 -48)
Details
diff --git a/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigEntity.cs b/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigEntity.cs
new file mode 100644
index 0000000..e2fb4b3
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigEntity.cs
@@ -0,0 +1,100 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.IO;
+
+using RW_Tool;
+using RW_Tool.DataSource.FileOrStream;
+
+using ConfigurationTool.Serializer;
+using SingletonTool;
+
+namespace ConfigurationTool.ConfigMultiple
+{
+ //Singlethon сущность конфига
+ public class ConfigEntity<T>
+ : ISignlethonWithParams<ConfigParams>
+ where T : class, new()
+ {
+ //Параметры конфига
+ public ConfigParams Params { private set; get; }
+
+ //Объект сериализации
+ private ISerializer<T> Serializer;
+
+ //Данные, хранимые в конфиге
+ public Dictionary<string, T> Data { set; get; } = new Dictionary<string, T>();
+
+
+ public void SetParams(ConfigParams param)
+ {
+ Params = param;
+
+ switch (param.Format)
+ {
+ case EnumFormat.XML: Serializer = new XMLSerializer<T>(Params.ConfigDirectoryPath); break;
+ case EnumFormat.Binary: Serializer = new BinarySerializer<T>(Params.ConfigDirectoryPath); break;
+ }
+
+ if (Directory.Exists(Params.ConfigDirectoryPath))
+ ImportAll();
+ ExportAll();
+ }
+
+
+
+
+
+ public void Export(string key)
+ {
+ Serializer.Writer.Write(
+ Data[key],
+ new DS_File() { FilePath = Params.GetPathForFile(key) }
+ );
+ }
+ 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.Reader.Read(new DS_File() { FilePath = path})
+ );
+ }
+ public void ImportAll()
+ {
+ DirectoryInfo dir = Params.ConfigDirectoryInfo;
+
+ if (!dir.Exists)
+ {
+ dir.Create();
+ return;
+ }
+
+ var data = dir.GetFiles();
+
+ foreach (var elem in data)
+ {
+ Import(elem.FullName);
+ }
+ }
+ }
+}
diff --git a/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigParams.cs b/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigParams.cs
new file mode 100644
index 0000000..cc73071
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigParams.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.IO;
+using System.Windows.Forms;
+
+namespace ConfigurationTool.ConfigMultiple
+{
+ public enum EnumFormat
+ {
+ XML,
+ Binary
+ }
+
+ //Базовые параметры конфига
+ public class ConfigParams
+ {
+ //Папка, в которой будут храниться конфиги
+ public string ConfigDirectory { set; get; }
+ //Флаг: испоьзовать ли в пути к файлу путь к .exe приложению
+ public bool UseApplicationPathPrefix { set; get; } = true;
+
+ //Формат в котором будет храниться конфиг
+ public EnumFormat Format { set; get; } = EnumFormat.XML;
+
+ //Пересоздавать папку при общем сохранении
+ 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")
+ );
+ }
+}
diff --git a/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigurationManager.cs b/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigurationManager.cs
new file mode 100644
index 0000000..a27271d
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigMultiple/ConfigurationManager.cs
@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.IO;
+
+using SingletonTool;
+
+namespace ConfigurationTool.ConfigMultiple
+{
+ //Обеспечивате доступ к конфигу
+ public sealed class ConfigurationManager<T>
+ where T: class, new()
+ {
+ //Конфиг
+ private ConfigEntity<T> Config => SignlethonWithParams<ConfigEntity<T>, ConfigParams>.Get();
+ //Данные конфига
+ public Dictionary<string,T> Data => Config.Data;
+
+ //При первом обращении необходимо использовать данный конструктор для иницилизации параметров конфига
+ public ConfigurationManager(ConfigParams param)
+ {
+ if (!SignlethonWithParams<ConfigEntity<T>, ConfigParams>.ExistInstance)
+ SignlethonWithParams<ConfigEntity<T>, ConfigParams>.Create(param);
+ }
+
+ //Для повторных обращений к конфигу
+ public ConfigurationManager()
+ {
+ if (!SignlethonWithParams<ConfigEntity<T>, ConfigParams>.ExistInstance)
+ throw new Exception("Use ConfigurationManager(ConfigParams param) first");
+ }
+
+
+ public void Add(string key, T 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);
+ }
+
+ //Прочитать из файла
+ public void Import()
+ {
+ Config.ImportAll();
+ }
+ //Сохранить в файл
+ public void Export()
+ {
+ Config.ExportAll();
+ }
+
+ }
+}
diff --git a/ToolPack1/ConfigurationTool/ConfigurationTool.csproj b/ToolPack1/ConfigurationTool/ConfigurationTool.csproj
index 27ab877..3e54a23 100644
--- a/ToolPack1/ConfigurationTool/ConfigurationTool.csproj
+++ b/ToolPack1/ConfigurationTool/ConfigurationTool.csproj
@@ -43,10 +43,13 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
+ <Compile Include="ConfigMultiple\ConfigEntity.cs" />
+ <Compile Include="ConfigMultiple\ConfigParams.cs" />
+ <Compile Include="ConfigMultiple\ConfigurationManager.cs" />
<Compile Include="CustomSerializer\BaseCustomSerialazible.cs" />
- <Compile Include="ConfigEntity.cs" />
- <Compile Include="ConfigParams.cs" />
- <Compile Include="ConfigurationManager.cs" />
+ <Compile Include="Config\ConfigEntity.cs" />
+ <Compile Include="Config\ConfigParams.cs" />
+ <Compile Include="Config\ConfigurationManager.cs" />
<Compile Include="CustomSerializer\ICustomSerialazible.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RW\Bin\Bin_Reader.cs" />
diff --git a/ToolPack1/ConfigurationTool/Serializer/ISerializer.cs b/ToolPack1/ConfigurationTool/Serializer/ISerializer.cs
index b483a4b..0e98bff 100644
--- a/ToolPack1/ConfigurationTool/Serializer/ISerializer.cs
+++ b/ToolPack1/ConfigurationTool/Serializer/ISerializer.cs
@@ -3,10 +3,16 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
+using RW_Tool.Interface;
+using RW_Tool.DataSource.FileOrStream;
+
namespace ConfigurationTool.Serializer
{
public interface ISerializer<T>
{
+ IReader<T, DS_FileOrStream> Reader { get; }
+ IWriter<T, DS_FileOrStream> Writer { get; }
+
T Read();
void Write(T entity);
}
ToolPack1/Console/Program.cs 120(+72 -48)
diff --git a/ToolPack1/Console/Program.cs b/ToolPack1/Console/Program.cs
index 20fa769..a088854 100644
--- a/ToolPack1/Console/Program.cs
+++ b/ToolPack1/Console/Program.cs
@@ -4,75 +4,99 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
-using ConfigurationTool;
+//using ConfigurationTool.Config;
+using ConfigurationTool.ConfigMultiple;
using ConfigurationTool.CustomSerializer;
namespace Console
-{
- public class ConfigData : BaseCustomSerialazible<ConfigData.ConfigData_Serial>
- {
- public class ConfigData_Serial
- {
- public class Item
- {
- public int Key { set; get; }
- public string Value { set; get; }
- }
+{
+ //public class ConfigData : BaseCustomSerialazible<ConfigData.ConfigData_Serial>
+ //{
+ // public class ConfigData_Serial
+ // {
+ // public class Item
+ // {
+ // public int Key { set; get; }
+ // public string Value { set; get; }
+ // }
- public string Name { set; get; }
- public int ID { set; get; }
+ // public string Name { set; get; }
+ // public int ID { set; get; }
- public List<Item> dictionary { set; get; }
- }
+ // public List<Item> dictionary { set; get; }
+ // }
- public string Name { set; get; } = "n";
- public int ID { set; get; } = 23;
+ // public string Name { set; get; } = "n";
+ // public int ID { set; get; } = 23;
- public Dictionary<int, string> dictionary { set; get; } = new Dictionary<int, string>
- {
- [1]="1",
- [2]="2"
- };
+ // public Dictionary<int, string> dictionary { set; get; } = new Dictionary<int, string>
+ // {
+ // [1]="1",
+ // [2]="2"
+ // };
- public override ConfigData_Serial Export()
- => new ConfigData_Serial()
- {
- ID = ID,
- Name = Name,
- dictionary = dictionary
- .Select(e =>
- new ConfigData_Serial.Item()
- {
- Key = e.Key,
- Value = e.Value
- }
- )
- .ToList()
- };
- public override void Import(ConfigData_Serial obj)
- {
- ConfigData_Serial data = (ConfigData_Serial)obj;
+ // public override ConfigData_Serial Export()
+ // => new ConfigData_Serial()
+ // {
+ // ID = ID,
+ // Name = Name,
+ // dictionary = dictionary
+ // .Select(e =>
+ // new ConfigData_Serial.Item()
+ // {
+ // Key = e.Key,
+ // Value = e.Value
+ // }
+ // )
+ // .ToList()
+ // };
+ // public override void Import(ConfigData_Serial obj)
+ // {
+ // ConfigData_Serial data = (ConfigData_Serial)obj;
- ID = data.ID;
- Name = data.Name;
+ // ID = data.ID;
+ // Name = data.Name;
- dictionary = data.dictionary
- .ToDictionary(e => e.Key, e2 => e2.Value);
- }
+ // dictionary = data.dictionary
+ // .ToDictionary(e => e.Key, e2 => e2.Value);
+ // }
+ //}
+
+ public class ConfigItem
+ {
+ public int ID { set; get; }
+ public string Name { set; get; }
+ public DateTime Date { set; get; }
}
class Program
{
static void Main(string[] args)
{
- var conf = new ConfigurationManager<ConfigData>(new ConfigParams()
+ //var conf = new ConfigurationManager<ConfigData>(new ConfigParams()
+ //{
+ // ConfigFile = "Config.xml",
+ // Format = EnumFormat.XML,
+ // UseApplicationPathPrefix = true
+ //});
+
+ var conf = new ConfigurationManager<ConfigItem>(new ConfigParams()
{
- ConfigFile = "Config.xml",
+ ConfigDirectory = "ConfigsItems",
Format = EnumFormat.XML,
- UseApplicationPathPrefix = true
+ UseApplicationPathPrefix= true
});
+ for (int i = 0; i < 2; i++)
+ {
+ conf.Add(i.ToString(), new ConfigItem()
+ {
+ ID = i,
+ Name = "name" + i,
+ Date = DateTime.Now
+ });
+ }
}
}
}