0

このようにして、グローバル Try Catch メカニズムを実装しました。という別のクラスを追加しましたHandleException.cs

public static class HandleException
{
    public static void GlobalTryCatch(Action action, object obj)
    {
        try
        {
            action.Invoke();
        }
        catch(SqlException ex)
        {
            obj.GetType().GetProperty("Success").SetValue(obj.GetType(), false);
            obj.GetType().GetProperty("FailureMessage").SetValue(obj.GetType(), ex);
        }
        catch(Exception ex)
        {
            obj.GetType().GetProperty("Success").SetValue(obj.GetType(), false);
            obj.GetType().GetProperty("FailureMessage").SetValue(obj.GetType(), ex);
        }
    }
}

そして、このように呼び出します。

public override Result<int> Update(UserProfile data)
    {

        var result = new Result<int> { Success = false };

        HandleException.GlobalTryCatch(() =>
                                           {
                                               SqlParameter[] sParam =
                                                   {
                                                       DbHelper.CreateParameter("@UserId", ParameterDirection.Input, SqlDbType.Int, data.UserId),
                                                       DbHelper.CreateParameter("@FirstName", ParameterDirection.Input, SqlDbType.VarChar,100, data.FirstName),
                                                       DbHelper.CreateParameter("@LastName", ParameterDirection.Input, SqlDbType.VarChar,100, data.LastName),
                                                       DbHelper.CreateParameter("@Gender", ParameterDirection.Input, SqlDbType.Char,1, data.Gender),
                                                       DbHelper.CreateParameter("@Dob", ParameterDirection.Input, SqlDbType.Date, data.DateOfBirth),
                                                       DbHelper.CreateParameter("@ImageUrl", ParameterDirection.Input, SqlDbType.VarChar, 150, data.ImageUrl),
                                                   };

                                               using(var sql = new DbHelper())
                                               {
                                                   sql.ExecuteSpReturnScalar("UserProfile_Update", sParam);
                                               }
                                               result.Success = true;
                                           }, result);
        return result;

}

私の質問は

  1. これはグローバルな try catch メカニズムを実装するための標準的な方法ですか、それともこれを実装する他の標準的な方法はありますか?
  2. 私はこれをGlobalTryCatchメソッドで使用していました。この方法で、Generic Object を渡すことでプロパティに値を割り当てることができるかどうか?

    obj.GetType().GetProperty("成功").SetValue(obj.GetType(), false);

4

2 に答える 2