首页 > 代码库 > 反射动态创建不同的Processor

反射动态创建不同的Processor

1. 定义抽象方法

  public abstract class BaseProcesser
    {
        public abstract void GetCustomerReportCardDetailInfo(CustomerReportCardRequest request, ReportCardResult response);
    }

2. 所有Processor都继承自BaseProcessor

 public class GiftProcesser : BaseProcesser
    {
        public override void GetCustomerReportCardDetailInfo(CustomerReportCardRequest request, ReportCardResult response)
        {
            response.GiftInfo = GiftAccessor.GetGiftInfo(request);
        }
    }

3.将Processor的名称配置起来,通过反射动态加载去执行

4.具体示例如下:

 public static CustomerReportCardResponse GetCustomerReportCardInfo(CustomerReportCardRequest request, string view, string[] expand)        {            ReportCardResult result = new ReportCardResult();            List<string> currencyCodes = new List<string>();            if (view == "DETAIL")            {                if (!CheckCurrencyCode(request, ref currencyCodes))                {                    return null;                }                IEnumerable<string> processKeys = AllProcessers.Where(n => expand.Contains(n.Key)).Select(n => n.Key);                foreach (var key in processKeys)                {                    var processer = AllProcessers[key];                    processer.GetCustomerReportCardDetailInfo(request, result);                }            }            return SetCustomerReportCardResponse(result, request, currencyCodes);        }        private static Dictionary<string, BaseProcesser> allProcessers = null;        private static Dictionary<string, BaseProcesser> AllProcessers        {            get            {                if (allProcessers == null)                {                    allProcessers = new Dictionary<string, BaseProcesser>();                    Dictionary<string, string> classNames = GetResource();                    foreach (var key in classNames.Keys)                    {                        BaseProcesser detail = typeof(BaseProcesser).Assembly.CreateInstance(classNames[key]) as BaseProcesser;                        if (detail == null) continue;                        if (!allProcessers.ContainsKey(key))                        {                            allProcessers.Add(key, detail);                        }                    }                }                return allProcessers;            }        }        private static Dictionary<string, string> GetResource()        {            Dictionary<string, string> result = new Dictionary<string, string>();            PerKeyValue keyValue = http://www.mamicode.com/ConfigContainer.KeyValuesConfig["CustomerReportCardExpand"];            if (keyValue =http://www.mamicode.com/= null) return null;"Class"].Value;            foreach (PerKeyValue resource in keyValues)            {                if (resource == null) continue;                result.Add(resource.Name, assemblyBase + "." + resource.Value);            }            return result;        }

  

 

反射动态创建不同的Processor