Beispiel #1
0
 public decimal GetTotalPrice(string selectValue, decimal startTotalPrice)
 {
     var cat     = new CashAcceptType();
     var ds      = cat.GetCashAcceptType();
     var cs      = new CashStrategy();
     var dataRow = ((DataRow[])ds.Tables[0].Select("name=" + selectValue + ""))[0];
 }
        /// <summary>
        /// 用于根据商品活动的不同,计算此商品的实际收费
        /// </summary>
        /// <param name="selectValue">用户选择的活动</param>
        /// <param name="startTotalPrice">原价</param>
        /// <returns></returns>
        public decimal GetTotalPrice(string selectValue, decimal startTotalPrice)
        {
            //获取配置文件中的活动类型
            var cat = new CashAcceptType();
            var ds  = cat.GetCashAcceptType();

            var cs = new CashStrategy();

            //按用户选择的活动名称,查出活动信息,主要是查出对应的class、para字段的内容
            var dataRow = ((DataRow[])ds.Tables[0].Select("name='" + selectValue + "'"))[0];

            //反射技术,根据已知的类名,读dll文件来创建对象
            //获取类名
            var classname = dataRow["class"].ToString();

            //获取参数
            object[] args = null;
            if (!string.IsNullOrEmpty(dataRow["para"].ToString()))
            {
                args = dataRow["para"].ToString().Split(',');
            }

            //Assembly.Load 读取对应的dll文件
            //CreateInstance创建dll文件中对应类的对象
            var obj = Assembly.Load("CashShop.Bussiness")
                      .CreateInstance("CashShop.Bussiness." + classname, false, BindingFlags.Default, null, args, null, null);

            cs.setBehavior((CashSuper)obj);

            return(cs.GetResult(startTotalPrice));
        }