如何调用一个知道其签名为字符串的方法?

时间:2015-02-01 11:49:51

标签: c# asp.net design-patterns methods transactions

如果我有这样的业务流程集:

  • 奖励
  • 度假
  • 加班

每个流程都有一个Insert Method像这样:

 public string InsertReward()
        {
            using (IfxConnection con = new IfxConnection(ConfigurationManager.ConnectionStrings["rr35"].ToString()))
            {
                int affectedRow = -1;
                int req_serial = 0;
                    req_serial = GetMaxSerial(DateTime.Now.Year);
                    StringBuilder cmdTxt = new StringBuilder();
                    cmdTxt.Append(" INSERT INTO RewardProcess(gen_year,gen_ser,bonus_type,bonus_date,bonus_desc,main_code,year,emp_num,active_ser) VALUES (?,?,?,?,?,?,?,?,? ) ");
                    using (var myIfxCmd = new IfxCommand(cmdTxt.ToString(), con))
                    {
                        myIfxCmd.CommandType = CommandType.Text;
                        myIfxCmd.Parameters.Add("gen_year", IfxType.Integer);
                        myIfxCmd.Parameters.Add("gen_ser", IfxType.Integer);
                        myIfxCmd.Parameters.Add("bonus_type", IfxType.SmallInt);
                        myIfxCmd.Parameters.Add("bonus_date", IfxType.Date);
                        myIfxCmd.Parameters.Add("bonus_desc", IfxType.NVarChar);
                        myIfxCmd.Parameters.Add("main_code", IfxType.Integer);
                        myIfxCmd.Parameters.Add("year", IfxType.Integer);
                        myIfxCmd.Parameters.Add("emp_num", IfxType.Integer);
                        myIfxCmd.Parameters.Add("active_ser", IfxType.SmallInt);

                        if (con.State == ConnectionState.Closed)
                        {
                            con.Open();
                        }

                        myIfxCmd.Parameters[0].Value = ((object)Req_year) ?? DBNull.Value;
                        myIfxCmd.Parameters[1].Value = ((object)req_serial) ?? DBNull.Value;
                        myIfxCmd.Parameters[2].Value = ((object)Bonus_type) ?? DBNull.Value;
                        myIfxCmd.Parameters[3].Value = ((object)Bonus_date) ?? DBNull.Value;
                        myIfxCmd.Parameters[4].Value = ((object)Bonus_desc) ?? DBNull.Value;
                        myIfxCmd.Parameters[5].Value = ((object)Main_code) ?? DBNull.Value;
                        myIfxCmd.Parameters[6].Value = ((object)Year) ?? DBNull.Value;
                        myIfxCmd.Parameters[7].Value = ((object)Emp_num) ?? DBNull.Value;
                        myIfxCmd.Parameters[8].Value = ((object)Active_ser) ?? DBNull.Value;
                        affectedRow = myIfxCmd.ExecuteNonQuery();
                    }
                    con.Close();
                    con.Dispose();
                    if (affectedRow > 0)
                    {
                        return DateTime.Now.Year + "," + req_serial;
                    }
                    else if (affectedRow == 0)
                    {
                        return string.Empty;
                    }
                    else
                    {
                        return affectedRow.ToString();
                    }
            }
        }

在插入业务流程之后,我使用process ID插入交易。

现在我想创建一个general method(对于所有进程),此方法将检查进程ID并调用其插入方法,然后调用有关事务方法的第二个方法。我希望使用ambient transaction

在一次交易中完成所有这些操作

.net中是否有东西允许调用方法知道它的签名是否为字符串?

Void RootMethod(int processId)
{
   using(TransactionScope scope = new TransactionScope())
     {
         //1-Detect the signature of the insertion method by process id then call it by passing the suitable filled object 
         //2-call transaction method
      } 
}

1 个答案:

答案 0 :(得分:0)

您好我建议使用编译时方法:为注册商生成代码通过其签名字符串索引相关方法(您可以使用带有此机制的标记属性的CodeDom)。