ProcessorHandler:
using System;
using System.Reflection;
using System.Collections.Specialized;
using System.Configuration;
namespace Credit.Business
{
/// <summary>
/// Summary description for ProcessSectionHandler.
/// </summary>
public class ProcessorHandler
{
private static readonly NameValueCollection s_MultiProcessor = ConfigurationSettings.GetConfig("processorSetting") as NameValueCollection;
public static BaseCreditProcess[] CreateAllInstance()
{
BaseCreditProcess[] processors = new BaseCreditProcess[s_MultiProcessor.Count];
for(int i=0; i<s_MultiProcessor.Count; ++i)
{
string[] assemblyInfo = s_MultiProcessor[i].Split(',');
string typeName = assemblyInfo[0].Trim();
string assemblyName = assemblyInfo[1].Trim();
processors[i] = (BaseCreditProcess)Assembly.Load(assemblyName).CreateInstance(typeName);
}
return processors;
}
public static string GetKeyFromClassName(string name)
{
foreach(string key in s_MultiProcessor.AllKeys)
{
if(s_MultiProcessor[key].StartsWith(name))
{
return key;
}
}
return null;
}
public static BaseCreditProcess Create(string key)
{
string[] assemblyInfo = s_MultiProcessor[key].Split(',');
string typeName = assemblyInfo[0].Trim();
string assemblyName = assemblyInfo[1].Trim();
object obj = Assembly.Load(assemblyName).CreateInstance(typeName);
return obj as BaseCreditProcess;
}
public static BaseCreditProcess Create(string key, params Object[] args)
{
string[] assemblyInfo = s_MultiProcessor[key].Split(',');
string typeName = assemblyInfo[0].Trim();
string assemblyName = assemblyInfo[1].Trim();
object obj = Assembly.Load(assemblyName).CreateInstance(typeName, false, BindingFlags.CreateInstance, null, args, null, null);
return obj as BaseCreditProcess;
}
public static Type Build(String key)
{
String[] assemblyInfo = s_MultiProcessor[key].Split(',');
String typeName = assemblyInfo[0].Trim();
String assemblyName = assemblyInfo[1].Trim();
return Assembly.Load(assemblyName).GetType(typeName);
}
}
}
Main:
[STAThread]
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UEPolicy);
try
{
if(!ProcessCheck.CheckCurrentThreadFromConfig())
{
// Logger.Write("Current mode is not allowed of CreditForVoidSo running again.");
return;
}
int currentTime = 0;
while(Setting.RunTimes <= 0 || currentTime < Setting.RunTimes)
{
BaseCreditProcess[] processors = ProcessorHandler.CreateAllInstance();
foreach(BaseCreditProcess processor in processors)
{
string systemName = ProcessorHandler.GetKeyFromClassName(processor.ToString());
processor.Charge();
Thread.Sleep(TimeSpan.FromSeconds(10));
}
//Logger.Write(string.Format("System will sleep {0} minutes.", Setting.RunInterval));
++ currentTime;
if (Setting.RunTimes <= 0 || currentTime < Setting.RunTimes)
{
Thread.Sleep(TimeSpan.FromMinutes(Setting.RunInterval));
}
}
}
catch(Exception ex)
{
Console.WriteLine("Exception:" + ex.Message);
}
}
APP.CONFIG:
<configSections>
<section name="processorSetting" type="System.Configuration.NameValueFileSectionHandler, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<processorSetting>
<! --<add key="NEG_CreditSystem" value="Credit.Business.NeweggCreditSystem, Credit.Business"></add>-->
<add key="ABS_CreditSystem" value="Credit.Business.ABSCreditSystem, Credit.Business"></add>
<add key="CHV_CreditSystem" value="Credit.Business.ChiefValueCreditSystem, Credit.Business"></add>
</processorSetting>