BaseFactory: Generic base factory.
This commit is contained in:
73
VAR.Toolbox/Code/BaseFactory.cs
Normal file
73
VAR.Toolbox/Code/BaseFactory.cs
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace VAR.Toolbox.Code
|
||||||
|
{
|
||||||
|
public abstract class BaseFactory<T> where T : INamed
|
||||||
|
{
|
||||||
|
private static Dictionary<string, Type> _dictTypes = null;
|
||||||
|
|
||||||
|
private static Dictionary<string, Type> GetDict()
|
||||||
|
{
|
||||||
|
if (_dictTypes != null)
|
||||||
|
{
|
||||||
|
return _dictTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
Type iType = typeof(T);
|
||||||
|
IEnumerable<Type> types = ReflectionUtils.GetTypesOfInterface(iType);
|
||||||
|
_dictTypes = types.ToDictionary(t =>
|
||||||
|
{
|
||||||
|
T type = (T)System.Runtime.Serialization.FormatterServices.GetUninitializedObject(t);
|
||||||
|
return type.Name;
|
||||||
|
});
|
||||||
|
|
||||||
|
return _dictTypes;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string[] GetNames()
|
||||||
|
{
|
||||||
|
Dictionary<string, Type> dict = GetDict();
|
||||||
|
return dict.Select(p => p.Key).ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static T CreateFromName(string name)
|
||||||
|
{
|
||||||
|
Dictionary<string, Type> dict = GetDict();
|
||||||
|
if (dict.ContainsKey(name) == false)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException(string.Format("Cant create {1} with this name: {0}", name, typeof(T).Name));
|
||||||
|
}
|
||||||
|
Type type = dict[name];
|
||||||
|
|
||||||
|
T instance = (T)Activator.CreateInstance(type);
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static T CreateFromConfig(string config)
|
||||||
|
{
|
||||||
|
Dictionary<string, Type> dict = GetDict();
|
||||||
|
int indexOfColon = config.IndexOf(':');
|
||||||
|
string name = config.Substring(0, indexOfColon < 0 ? config.Length : indexOfColon);
|
||||||
|
string nextConfig = config.Substring(indexOfColon + 1);
|
||||||
|
if (string.IsNullOrEmpty(name))
|
||||||
|
{
|
||||||
|
return (T)(object)null;
|
||||||
|
}
|
||||||
|
if (dict.ContainsKey(name) == false)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException(string.Format("Cant create {1} with this config: {0}", config, typeof(T).Name));
|
||||||
|
}
|
||||||
|
Type type = dict[name];
|
||||||
|
|
||||||
|
T instance = (T)Activator.CreateInstance(type, new object[] { nextConfig });
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface INamed
|
||||||
|
{
|
||||||
|
string Name { get; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,7 @@
|
|||||||
namespace VAR.Toolbox.Code.ProxyCmdExecutors
|
namespace VAR.Toolbox.Code.ProxyCmdExecutors
|
||||||
{
|
{
|
||||||
public interface IProxyCmdExecutor
|
public interface IProxyCmdExecutor : INamed
|
||||||
{
|
{
|
||||||
string Name { get; }
|
|
||||||
|
|
||||||
bool ExecuteCmd(string cmd, IOutputHandler outputHandler);
|
bool ExecuteCmd(string cmd, IOutputHandler outputHandler);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,50 +1,6 @@
|
|||||||
using System;
|
namespace VAR.Toolbox.Code.ProxyCmdExecutors
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace VAR.Toolbox.Code.ProxyCmdExecutors
|
|
||||||
{
|
{
|
||||||
public class ProxyCmdExecutorFactory
|
public class ProxyCmdExecutorFactory : BaseFactory<IProxyCmdExecutor>
|
||||||
{
|
{
|
||||||
private static Dictionary<string, Type> _dictProxyCmdExecutors = null;
|
|
||||||
|
|
||||||
private static Dictionary<string, Type> GetDict()
|
|
||||||
{
|
|
||||||
if (_dictProxyCmdExecutors != null)
|
|
||||||
{
|
|
||||||
return _dictProxyCmdExecutors;
|
|
||||||
}
|
|
||||||
|
|
||||||
Type iTextCoder = typeof(IProxyCmdExecutor);
|
|
||||||
IEnumerable<Type> toolFormTypes = ReflectionUtils.GetTypesOfInterface(iTextCoder);
|
|
||||||
_dictProxyCmdExecutors = toolFormTypes.ToDictionary(t =>
|
|
||||||
{
|
|
||||||
IProxyCmdExecutor proxyCmdExecutor = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(t) as IProxyCmdExecutor;
|
|
||||||
return proxyCmdExecutor.Name;
|
|
||||||
});
|
|
||||||
|
|
||||||
return _dictProxyCmdExecutors;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IProxyCmdExecutor CreateFromConfig(string config)
|
|
||||||
{
|
|
||||||
Dictionary<string, Type> dict = GetDict();
|
|
||||||
int indexOfColon = config.IndexOf(':');
|
|
||||||
string name = config.Substring(0, indexOfColon < 0 ? config.Length : indexOfColon);
|
|
||||||
string nextConfig = config.Substring(indexOfColon + 1);
|
|
||||||
if (string.IsNullOrEmpty(name))
|
|
||||||
{
|
|
||||||
return new ProxyCmdExecutorDummy(string.Empty);
|
|
||||||
}
|
|
||||||
if (dict.ContainsKey(name) == false)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException(string.Format("Cant create IProxyCmdExecutor with this config: {0}", config));
|
|
||||||
}
|
|
||||||
Type proxyCmdExecutorType = dict[name];
|
|
||||||
|
|
||||||
IProxyCmdExecutor proxyCmdExecutor = Activator.CreateInstance(proxyCmdExecutorType, new object[] { nextConfig }) as IProxyCmdExecutor;
|
|
||||||
|
|
||||||
return proxyCmdExecutor;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
namespace VAR.Toolbox.Code.TextCoders
|
namespace VAR.Toolbox.Code.TextCoders
|
||||||
{
|
{
|
||||||
public interface ITextCoder
|
public interface ITextCoder : INamed
|
||||||
{
|
{
|
||||||
string Name { get; }
|
|
||||||
|
|
||||||
bool NeedsKey { get; }
|
bool NeedsKey { get; }
|
||||||
|
|
||||||
string Encode(string input, string key);
|
string Encode(string input, string key);
|
||||||
|
|||||||
@@ -1,46 +1,6 @@
|
|||||||
using System;
|
namespace VAR.Toolbox.Code.TextCoders
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
|
|
||||||
namespace VAR.Toolbox.Code.TextCoders
|
|
||||||
{
|
{
|
||||||
public class TextCoderFactory
|
public class TextCoderFactory : BaseFactory<ITextCoder>
|
||||||
{
|
{
|
||||||
private static Dictionary<string, Type> _dictTextCoderTypes = null;
|
|
||||||
|
|
||||||
private static Dictionary<string, Type> GetDict()
|
|
||||||
{
|
|
||||||
if (_dictTextCoderTypes != null)
|
|
||||||
{
|
|
||||||
return _dictTextCoderTypes;
|
|
||||||
}
|
|
||||||
|
|
||||||
Type iTextCoder = typeof(ITextCoder);
|
|
||||||
IEnumerable<Type> toolFormTypes = ReflectionUtils.GetTypesOfInterface(iTextCoder);
|
|
||||||
_dictTextCoderTypes = toolFormTypes.ToDictionary(t =>
|
|
||||||
{
|
|
||||||
ITextCoder textCoder = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(t) as ITextCoder;
|
|
||||||
return textCoder.Name;
|
|
||||||
});
|
|
||||||
|
|
||||||
return _dictTextCoderTypes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static string[] GetSupportedCoders()
|
|
||||||
{
|
|
||||||
Dictionary<string, Type> dict = GetDict();
|
|
||||||
return dict.Select(p => p.Key).ToArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ITextCoder CreateFromName(string name)
|
|
||||||
{
|
|
||||||
Dictionary<string, Type> dict = GetDict();
|
|
||||||
if (dict.ContainsKey(name) == false)
|
|
||||||
{
|
|
||||||
throw new NotImplementedException(string.Format("Cant create ITextCoder with this name: {0}", name));
|
|
||||||
}
|
|
||||||
Type textCoder = dict[name];
|
|
||||||
return Activator.CreateInstance(textCoder) as ITextCoder;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace VAR.Toolbox.UI
|
|||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
|
||||||
cboCode.Items.AddRange(TextCoderFactory.GetSupportedCoders());
|
cboCode.Items.AddRange(TextCoderFactory.GetNames());
|
||||||
cboCode.SelectedIndex = 1;
|
cboCode.SelectedIndex = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -129,6 +129,10 @@ namespace VAR.Toolbox.UI
|
|||||||
if (_proxyCmdExecutor == null)
|
if (_proxyCmdExecutor == null)
|
||||||
{
|
{
|
||||||
_proxyCmdExecutor = ProxyCmdExecutorFactory.CreateFromConfig(GetCurrentConfig());
|
_proxyCmdExecutor = ProxyCmdExecutorFactory.CreateFromConfig(GetCurrentConfig());
|
||||||
|
if (_proxyCmdExecutor == null)
|
||||||
|
{
|
||||||
|
_proxyCmdExecutor = new ProxyCmdExecutorDummy(string.Empty);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private void CleanProxyCmdExecutor()
|
private void CleanProxyCmdExecutor()
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
<Compile Include="..\VAR.Json\VAR.Json\ParserContext.cs">
|
<Compile Include="..\VAR.Json\VAR.Json\ParserContext.cs">
|
||||||
<Link>Code\Json\ParserContext.cs</Link>
|
<Link>Code\Json\ParserContext.cs</Link>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="Code\BaseFactory.cs" />
|
||||||
<Compile Include="Code\EventDispatcher.cs" />
|
<Compile Include="Code\EventDispatcher.cs" />
|
||||||
<Compile Include="Code\HexUtils.cs" />
|
<Compile Include="Code\HexUtils.cs" />
|
||||||
<Compile Include="Code\IEventListener.cs" />
|
<Compile Include="Code\IEventListener.cs" />
|
||||||
|
|||||||
Reference in New Issue
Block a user