一段小代碼

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>

 
發佈了22 篇原創文章 · 獲贊 3 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章