ToolPack1

Папка Build содержит собранные DLL 1)SingletonTool Содержит

8/31/2019 9:31:09 PM

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/
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
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
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
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
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);
+        }
+    }
+}
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);
+            }            
+        }
+
+        
+    }
+}
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
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
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
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
+            });
+
+        }
+    }
+}
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")]
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;
+        }
+
+    }
+}
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
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