2015-02-01 1 views
0

Если я набор бизнес-процессов, как это:Как вызвать метод, зная его подпись как строку?

  • Награда
  • отпуск
  • курс
  • Сверхурочная

И каждый процесс имеет 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 (для всех процессов), этот метод проверит идентификатор процесса и вызовет его метод вставки, а после этого вызовет второй метод, касающийся метода транзакции. я хочу все это в одной транзакции, используя 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

juste use Reflection http://stackoverflow.com/questions/540066/calling-a-function-from-a-string-in-c-sharp. Хотя я бы пошел только с методом «Insert()» и некоторым полиморфизмом –

ответ

0

Привет Я хотел бы предложить компиляции подхода: генерировать код для регистратора Indexing соответствующих методов (вы можете использовать CodeDom с маркировкой атрибутом для этого механизма) по их строке подписи.

Смежные вопросы