public virtual void ExecuteCommand()
         {
             if (command == null)
                 throw new Exception("You forgot to set the command!!");
 
             try
             {
                 log(this.command.GetType().Name + " starting execution ");
                 command.Execute();
                 if (!command.Success)
                 {
                     log(this.command.GetType().Name + " completed execution but failed. Message: " + command.Message + " " + command.StatusCode.ToString());
                 }
                 else
                     log(this.command.GetType().Name + " completed execution. Success!");
 
             }
             catch (Exception ex)
             {
                 command.StatusCode = CommandStatusCode.Error;
                 Loggy.AddError("An unhandled error was caught in " + this.command.GetType().Name + ": " + ex.Message, ex);
                 command.Message = ex.ToString();
                 //throw;
             }
         }
         /// <summary>
         /// Executes the command using the default invoker.
         /// </summary>
         /// <param name="aCommand"></param>
         public static void Invoke(this Command aCommand)
         {
             System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace();
             System.Reflection.MethodBase m = stackTrace.GetFrame(1).GetMethod();
             String strMethodName = m.DeclaringType.Name + "." + m.Name;
 
             try
             {
                 Invoker invoker = new Invoker();
                 invoker.SetCommand(aCommand);
                 invoker.ExecuteCommand();
             }
             catch (Exception ex)
             {
                 Loggy.AddError("An error occured in Extensions.Invoke. + " + strMethodName ,ex);
                 throw ex;
             }
             
         }