class Operation
{
public Action DefaultSuccessCallback { get; set; }
public Action DefaultFailureCallback { get; set; }
public Operation InnerOperation { get; set; }
public object Operate(object input, Action successCallback ,Action failureCallback)
{
if (successCallback == null )
{
successCallback = this.DefaultSuccessCallback;
}
if (failureCallback == null )
{
failureCallback = this.DefaultFailureCallback; ;
}
object result = null;
try
{
result = this.InnerOperation.Operate(input, successCallback, failureCallback);
}
catch (Exception)
{
failureCallback.Invoke();
//throw;
}
successCallback.Invoke();
return result;
}
}