ToolPack1
Changes
.gitignore 12(+12 -0)
Build/ConfigurationTool.dll 0(+0 -0)
Build/ConfigurationTool.pdb 0(+0 -0)
Build/SingletonTool.dll 0(+0 -0)
Build/SingletonTool.pdb 0(+0 -0)
ToolPack1/ConfigurationTool/ConfigEntity.cs 54(+54 -0)
ToolPack1/ConfigurationTool/ConfigParams.cs 38(+38 -0)
ToolPack1/Console/App.config 6(+6 -0)
ToolPack1/Console/Config.xml 5(+5 -0)
ToolPack1/Console/Console.csproj 68(+68 -0)
ToolPack1/Console/Program.cs 30(+30 -0)
ToolPack1/Console/Properties/AssemblyInfo.cs 36(+36 -0)
ToolPack1/SingletonTool/Signlethon.cs 35(+35 -0)
ToolPack1/SingletonTool/SingletonTool.csproj 51(+51 -0)
ToolPack1/ToolPack1.sln 46(+46 -0)
Details
.gitignore 12(+12 -0)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..575328a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,12 @@
+
+ToolPack1/.vs/
+
+
+ToolPack1/Console/bin/
+ToolPack1/Console/obj/
+
+ToolPack1/ConfigurationTool/bin/
+ToolPack1/ConfigurationTool/obj/
+
+ToolPack1/SingletonTool/bin/
+ToolPack1/SingletonTool/obj/
Build/ConfigurationTool.dll 0(+0 -0)
diff --git a/Build/ConfigurationTool.dll b/Build/ConfigurationTool.dll
new file mode 100644
index 0000000..60a0dbc
Binary files /dev/null and b/Build/ConfigurationTool.dll differ
Build/ConfigurationTool.pdb 0(+0 -0)
diff --git a/Build/ConfigurationTool.pdb b/Build/ConfigurationTool.pdb
new file mode 100644
index 0000000..9dbbfe4
Binary files /dev/null and b/Build/ConfigurationTool.pdb differ
Build/SingletonTool.dll 0(+0 -0)
diff --git a/Build/SingletonTool.dll b/Build/SingletonTool.dll
new file mode 100644
index 0000000..57cdb9c
Binary files /dev/null and b/Build/SingletonTool.dll differ
Build/SingletonTool.pdb 0(+0 -0)
diff --git a/Build/SingletonTool.pdb b/Build/SingletonTool.pdb
new file mode 100644
index 0000000..f919791
Binary files /dev/null and b/Build/SingletonTool.pdb differ
ToolPack1/ConfigurationTool/ConfigEntity.cs 54(+54 -0)
diff --git a/ToolPack1/ConfigurationTool/ConfigEntity.cs b/ToolPack1/ConfigurationTool/ConfigEntity.cs
new file mode 100644
index 0000000..2ee2b39
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigEntity.cs
@@ -0,0 +1,54 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.IO;
+
+using ConfigurationTool.Serializer;
+using SingletonTool;
+
+namespace ConfigurationTool
+{
+ //Singlethon сущность конфига
+ public class ConfigEntity<T>
+ : ISignlethonWithParams<ConfigParams>
+ where T : new()
+ {
+ //Параметры конфига
+ public ConfigParams Params { private set; get; }
+
+ //Объект сериализации
+ private ISerializer<T> Serializer;
+
+ //Данные, хранимые в конфиге
+ public T Data { set; get; } = new T();
+
+ public void SetParams(ConfigParams param)
+ {
+ Params = param;
+
+ switch (param.Format)
+ {
+ case EnumFormat.XML: Serializer = new XMLSerializer<T>(); break;
+ case EnumFormat.Binary: Serializer = new BinarySerializer<T>(); break;
+ }
+
+ if (File.Exists(Params.ConfigPath))
+ Import();
+ Export();
+ }
+
+ //Прочитать файл
+ public void Import()
+ {
+ Data = Serializer.Import(Params.ConfigPath);
+ }
+ //Сохранить в файл
+ public void Export()
+ {
+ Serializer.Export(Data, Params.ConfigPath);
+ }
+ }
+}
ToolPack1/ConfigurationTool/ConfigParams.cs 38(+38 -0)
diff --git a/ToolPack1/ConfigurationTool/ConfigParams.cs b/ToolPack1/ConfigurationTool/ConfigParams.cs
new file mode 100644
index 0000000..1b1972a
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigParams.cs
@@ -0,0 +1,38 @@
+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
+{
+ public enum EnumFormat
+ {
+ XML,
+ Binary
+ }
+
+ //Базовые параметры конфига
+ public class ConfigParams
+ {
+ //Имя или полный путь к файлу конфигурации
+ public string ConfigFile { set; get; }
+ //Флаг: испоьзовать ли в пути к файлу путь к .exe приложению
+ public bool UseApplicationPathPrefix { set; get; } = true;
+
+ //Формат в котором будет храниться конфиг
+ public EnumFormat Format { set; get; } = EnumFormat.XML;
+
+ //Путь по которому выполняются обращению к конфигу
+ public string ConfigPath => (UseApplicationPathPrefix
+ ?
+ Path.Combine(Application.StartupPath, ConfigFile)
+ :
+ ConfigFile
+ );
+
+ }
+}
diff --git a/ToolPack1/ConfigurationTool/ConfigurationManager.cs b/ToolPack1/ConfigurationTool/ConfigurationManager.cs
new file mode 100644
index 0000000..ce6d039
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigurationManager.cs
@@ -0,0 +1,47 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using SingletonTool;
+
+namespace ConfigurationTool
+{
+ //Обеспечивате доступ к конфигу
+ public sealed class ConfigurationManager<T>
+ where T:new()
+ {
+ //Конфиг
+ private ConfigEntity<T> Config => SignlethonWithParams<ConfigEntity<T>, ConfigParams>.Get();
+ //Данные конфига
+ public 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 Import()
+ {
+ Config.Import();
+ }
+ //Сохранить в файл
+ public void Export()
+ {
+ Config.Export();
+ }
+
+ }
+}
diff --git a/ToolPack1/ConfigurationTool/ConfigurationTool.csproj b/ToolPack1/ConfigurationTool/ConfigurationTool.csproj
new file mode 100644
index 0000000..751c274
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/ConfigurationTool.csproj
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{E8A983A0-FF7D-4E9A-9234-3F19CCB93700}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>ConfigurationTool</RootNamespace>
+ <AssemblyName>ConfigurationTool</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <Deterministic>true</Deterministic>
+ <TargetFrameworkProfile />
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Windows.Forms" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="ConfigEntity.cs" />
+ <Compile Include="ConfigParams.cs" />
+ <Compile Include="ConfigurationManager.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Serializer\BinarySerializer.cs" />
+ <Compile Include="Serializer\ISerializer.cs" />
+ <Compile Include="Serializer\XMLSerializer.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\SingletonTool\SingletonTool.csproj">
+ <Project>{e69e7d23-3595-4742-ad69-9b245ce9c7b8}</Project>
+ <Name>SingletonTool</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/ToolPack1/ConfigurationTool/Properties/AssemblyInfo.cs b/ToolPack1/ConfigurationTool/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..2971d4d
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Общие сведения об этой сборке предоставляются следующим набором
+// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
+// связанные со сборкой.
+[assembly: AssemblyTitle("ConfigurationTool")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ConfigurationTool")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
+// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
+// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
+[assembly: ComVisible(false)]
+
+// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
+[assembly: Guid("e8a983a0-ff7d-4e9a-9234-3f19ccb93700")]
+
+// Сведения о версии сборки состоят из следующих четырех значений:
+//
+// Основной номер версии
+// Дополнительный номер версии
+// Номер сборки
+// Редакция
+//
+// Можно задать все значения или принять номер сборки и номер редакции по умолчанию.
+// используя "*", как показано ниже:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/ToolPack1/ConfigurationTool/Serializer/BinarySerializer.cs b/ToolPack1/ConfigurationTool/Serializer/BinarySerializer.cs
new file mode 100644
index 0000000..ed66beb
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/Serializer/BinarySerializer.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.IO;
+using System.Runtime.Serialization.Formatters.Binary;
+
+namespace ConfigurationTool.Serializer
+{
+ class BinarySerializer<T>
+ : ISerializer<T>
+ {
+
+ public T Import(string file)
+ {
+ // передаем в конструктор тип класса
+ BinaryFormatter formatter = new BinaryFormatter();
+
+ // десериализация
+ using (FileStream fs = new FileStream(file, FileMode.Open))
+ {
+ return (T)formatter.Deserialize(fs);
+ }
+ }
+
+ public void Export(T data, string file)
+ {
+ // передаем в конструктор тип класса
+ BinaryFormatter formatter = new BinaryFormatter();
+
+ // получаем поток, куда будем записывать сериализованный объект
+ using (FileStream fs = new FileStream(file, FileMode.Create))
+ {
+ formatter.Serialize(fs, data);
+ }
+ }
+
+
+ }
+}
diff --git a/ToolPack1/ConfigurationTool/Serializer/ISerializer.cs b/ToolPack1/ConfigurationTool/Serializer/ISerializer.cs
new file mode 100644
index 0000000..63989f7
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/Serializer/ISerializer.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ConfigurationTool.Serializer
+{
+ interface ISerializer<T>
+ {
+ T Import(string file);
+ void Export(T data, string file);
+ }
+}
diff --git a/ToolPack1/ConfigurationTool/Serializer/XMLSerializer.cs b/ToolPack1/ConfigurationTool/Serializer/XMLSerializer.cs
new file mode 100644
index 0000000..798b214
--- /dev/null
+++ b/ToolPack1/ConfigurationTool/Serializer/XMLSerializer.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.IO;
+using System.Xml.Serialization;
+
+namespace ConfigurationTool.Serializer
+{
+ class XMLSerializer<T>
+ : ISerializer<T>
+ {
+
+ public T Import(string file)
+ {
+ // передаем в конструктор тип класса
+ XmlSerializer formatter = new XmlSerializer(typeof(T));
+
+ // десериализация
+ using (FileStream fs = new FileStream(file, FileMode.Open))
+ {
+ return (T)formatter.Deserialize(fs);
+ }
+ }
+
+ public void Export(T data, string file)
+ {
+ // передаем в конструктор тип класса
+ XmlSerializer formatter = new XmlSerializer(typeof(T));
+
+ // получаем поток, куда будем записывать сериализованный объект
+ using (FileStream fs = new FileStream(file, FileMode.Create))
+ {
+ formatter.Serialize(fs, data);
+ }
+ }
+
+
+ }
+}
ToolPack1/Console/App.config 6(+6 -0)
diff --git a/ToolPack1/Console/App.config b/ToolPack1/Console/App.config
new file mode 100644
index 0000000..016d28f
--- /dev/null
+++ b/ToolPack1/Console/App.config
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
+ </startup>
+</configuration>
\ No newline at end of file
ToolPack1/Console/Config.xml 5(+5 -0)
diff --git a/ToolPack1/Console/Config.xml b/ToolPack1/Console/Config.xml
new file mode 100644
index 0000000..04145d2
--- /dev/null
+++ b/ToolPack1/Console/Config.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<ConfigData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+ <Name>Name</Name>
+ <ID>-10</ID>
+</ConfigData>
\ No newline at end of file
ToolPack1/Console/Console.csproj 68(+68 -0)
diff --git a/ToolPack1/Console/Console.csproj b/ToolPack1/Console/Console.csproj
new file mode 100644
index 0000000..e2fcce8
--- /dev/null
+++ b/ToolPack1/Console/Console.csproj
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{2383B162-6D95-47F4-AD93-8765DBB7AD89}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <RootNamespace>Console</RootNamespace>
+ <AssemblyName>Console</AssemblyName>
+ <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+ <Deterministic>true</Deterministic>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\ConfigurationTool\ConfigurationTool.csproj">
+ <Project>{e8a983a0-ff7d-4e9a-9234-3f19ccb93700}</Project>
+ <Name>ConfigurationTool</Name>
+ </ProjectReference>
+ <ProjectReference Include="..\SingletonTool\SingletonTool.csproj">
+ <Project>{e69e7d23-3595-4742-ad69-9b245ce9c7b8}</Project>
+ <Name>SingletonTool</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="Config.xml">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </Content>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
ToolPack1/Console/Program.cs 30(+30 -0)
diff --git a/ToolPack1/Console/Program.cs b/ToolPack1/Console/Program.cs
new file mode 100644
index 0000000..efc76b2
--- /dev/null
+++ b/ToolPack1/Console/Program.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using ConfigurationTool;
+
+namespace Console
+{
+ public class ConfigData
+ {
+ public string Name { set; get; } = "n";
+ public int ID { set; get; } = 23;
+ }
+
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ var conf = new ConfigurationManager<ConfigData>(new ConfigParams()
+ {
+ ConfigFile = "Config.xml",
+ Format = EnumFormat.XML,
+ UseApplicationPathPrefix = true
+ });
+
+ }
+ }
+}
ToolPack1/Console/Properties/AssemblyInfo.cs 36(+36 -0)
diff --git a/ToolPack1/Console/Properties/AssemblyInfo.cs b/ToolPack1/Console/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..f3b7077
--- /dev/null
+++ b/ToolPack1/Console/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Общие сведения об этой сборке предоставляются следующим набором
+// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
+// связанные со сборкой.
+[assembly: AssemblyTitle("Console")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Console")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
+// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
+// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
+[assembly: ComVisible(false)]
+
+// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
+[assembly: Guid("2383b162-6d95-47f4-ad93-8765dbb7ad89")]
+
+// Сведения о версии сборки состоят из следующих четырех значений:
+//
+// Основной номер версии
+// Дополнительный номер версии
+// Номер сборки
+// Редакция
+//
+// Можно задать все значения или принять номер сборки и номер редакции по умолчанию.
+// используя "*", как показано ниже:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/ToolPack1/SingletonTool/Properties/AssemblyInfo.cs b/ToolPack1/SingletonTool/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..726b9e4
--- /dev/null
+++ b/ToolPack1/SingletonTool/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Общие сведения об этой сборке предоставляются следующим набором
+// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
+// связанные со сборкой.
+[assembly: AssemblyTitle("SingletonTool")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("SingletonTool")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
+// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
+// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
+[assembly: ComVisible(false)]
+
+// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
+[assembly: Guid("e69e7d23-3595-4742-ad69-9b245ce9c7b8")]
+
+// Сведения о версии сборки состоят из следующих четырех значений:
+//
+// Основной номер версии
+// Дополнительный номер версии
+// Номер сборки
+// Редакция
+//
+// Можно задать все значения или принять номер сборки и номер редакции по умолчанию.
+// используя "*", как показано ниже:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
ToolPack1/SingletonTool/Signlethon.cs 35(+35 -0)
diff --git a/ToolPack1/SingletonTool/Signlethon.cs b/ToolPack1/SingletonTool/Signlethon.cs
new file mode 100644
index 0000000..8d0dd6a
--- /dev/null
+++ b/ToolPack1/SingletonTool/Signlethon.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SingletonTool
+{
+ /// <summary>
+ /// Обычный Singleton
+ /// </summary>
+ /// <typeparam name="T">
+ /// Объект T будет существовать в единственном экземпляре
+ /// </typeparam>
+ public static class Signlethon<T>
+ where T: class, new()
+ {
+ //Экземпляр синглтон
+ private static T single;
+
+ //Создан ли экземпляр
+ public static bool ExistInstance => single != null;
+
+
+ //Метод доступа к синглтону
+ public static T Get()
+ {
+ if (single == null)
+ single = new T();
+
+ return single;
+ }
+
+ }
+}
diff --git a/ToolPack1/SingletonTool/SignlethonWithParams.cs b/ToolPack1/SingletonTool/SignlethonWithParams.cs
new file mode 100644
index 0000000..f4865b5
--- /dev/null
+++ b/ToolPack1/SingletonTool/SignlethonWithParams.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SingletonTool
+{
+
+ //Класс выступающий в роли SinglCreate должен реализовать данный интерфейс
+ public interface ISignlethonWithParams<in P>
+ {
+ //Аналогичен конструктору с параметром для синглтона
+ void SetParams(P param);
+ }
+
+ /// <summary>
+ /// Перед обращениями необходимо создать экземпляр
+ /// вызовом метода Create
+ /// Позволяет передавать параметры при создании
+ /// </summary>
+ /// <typeparam name="T">Тип singleton</typeparam>
+ /// <typeparam name="P">Параметр для конструктора объекта T</typeparam>
+ public static class SignlethonWithParams<T, P>
+ where T : ISignlethonWithParams<P>, new()
+ {
+ //Экземпляр синглтон
+ private static T single;
+
+ //Создан ли экземпляр
+ public static bool ExistInstance => single != null;
+
+
+ //Создает экземпляр
+ public static T Create(P p)
+ {
+ if (ExistInstance)
+ throw new Exception("SinglCreate.Create | Singlethon instance already exist");
+
+ single = new T();
+ single.SetParams(p);
+
+ return single;
+ }
+
+ //Метод доступа к синглтону
+ public static T Get()
+ {
+ if (!ExistInstance)
+ throw new Exception("SinglCreate.Get() | Singlethon not create. Use Create(p)");
+
+ return single;
+ }
+
+ }
+}
ToolPack1/SingletonTool/SingletonTool.csproj 51(+51 -0)
diff --git a/ToolPack1/SingletonTool/SingletonTool.csproj b/ToolPack1/SingletonTool/SingletonTool.csproj
new file mode 100644
index 0000000..dd63039
--- /dev/null
+++ b/ToolPack1/SingletonTool/SingletonTool.csproj
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{E69E7D23-3595-4742-AD69-9B245CE9C7B8}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>SingletonTool</RootNamespace>
+ <AssemblyName>SingletonTool</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <Deterministic>true</Deterministic>
+ <TargetFrameworkProfile />
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Net.Http" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Signlethon.cs" />
+ <Compile Include="SignlethonWithParams.cs" />
+ </ItemGroup>
+ <ItemGroup />
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
ToolPack1/ToolPack1.sln 46(+46 -0)
diff --git a/ToolPack1/ToolPack1.sln b/ToolPack1/ToolPack1.sln
new file mode 100644
index 0000000..d85199c
--- /dev/null
+++ b/ToolPack1/ToolPack1.sln
@@ -0,0 +1,46 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.28307.136
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{ABC5281A-6B36-4D11-AFED-3E2EF981AA49}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Console", "Console\Console.csproj", "{2383B162-6D95-47F4-AD93-8765DBB7AD89}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{9FC03DF2-3AFE-4A62-B380-B9CBFF6486D1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SingletonTool", "SingletonTool\SingletonTool.csproj", "{E69E7D23-3595-4742-AD69-9B245CE9C7B8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConfigurationTool", "ConfigurationTool\ConfigurationTool.csproj", "{E8A983A0-FF7D-4E9A-9234-3F19CCB93700}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2383B162-6D95-47F4-AD93-8765DBB7AD89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2383B162-6D95-47F4-AD93-8765DBB7AD89}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2383B162-6D95-47F4-AD93-8765DBB7AD89}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2383B162-6D95-47F4-AD93-8765DBB7AD89}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E69E7D23-3595-4742-AD69-9B245CE9C7B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E69E7D23-3595-4742-AD69-9B245CE9C7B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E69E7D23-3595-4742-AD69-9B245CE9C7B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E69E7D23-3595-4742-AD69-9B245CE9C7B8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E8A983A0-FF7D-4E9A-9234-3F19CCB93700}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E8A983A0-FF7D-4E9A-9234-3F19CCB93700}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E8A983A0-FF7D-4E9A-9234-3F19CCB93700}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E8A983A0-FF7D-4E9A-9234-3F19CCB93700}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {2383B162-6D95-47F4-AD93-8765DBB7AD89} = {ABC5281A-6B36-4D11-AFED-3E2EF981AA49}
+ {E69E7D23-3595-4742-AD69-9B245CE9C7B8} = {9FC03DF2-3AFE-4A62-B380-B9CBFF6486D1}
+ {E8A983A0-FF7D-4E9A-9234-3F19CCB93700} = {9FC03DF2-3AFE-4A62-B380-B9CBFF6486D1}
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {408C4B5A-5AF0-418D-A722-B2B253B5F831}
+ EndGlobalSection
+EndGlobal