Ejemplo n.º 1
0
        public void StateMachineManager_Execute(Triggers.UserWizard Action)
        {
            #region Documentacion Reflection. Crear instancias
            //Documentacion Reflection. Crear instancias

            //MethodInfo method = typeof(W).GetMethod("TryFireTriggerParam");
            //Type typeEnum = typeof(WizardUser.Trigger);
            //Type typeHash = typeof(System.Collections.Hashtable);
            //MethodInfo generic = method.MakeGenericMethod(typeEnum, typeHash);
            //generic.Invoke(sm, new object[] { WizardUser.Trigger.Next, arg });

            //Type unboundGenericType = typeof(W);
            //Type typeEnum = typeof(WizardUser.Trigger);
            //Type typeHash = typeof(System.Collections.Hashtable);

            //Type boundGenericType = unboundGenericType.MakeGenericType(typeEnum, typeHash);
            //object instance = Activator.CreateInstance(boundGenericType);

            #endregion
            //Preparo HashMap para invocar el Trigger con Parametros
            //Transfiero el Modelo al DataTemp["Model"] para actualizar los datos en el Temp y asi mantener los datos del flujo
            //W smTemp = SM;
            //Se tiene que hacer por Reflection porque la StateMachine puede ser de cualquier tipo.
            try
            {
                Hashtable arg = StateMachineManager_SetArgument(TransferModeltoDataTemp(StateMachineManager_ViewModel));

                //Ejecucion por Reflection
                //MethodInfo TryFireTriggerParamMethod = StateMachineManager.GetType().GetMethod("TryFireTriggerParam");
                //TryFireTriggerParamMethod.Invoke(StateMachineManager, new object[] { Action, arg }); //Action viene por Parametro, y Arg(Argumentos del Trigger) se genera StateMachineManager_SetArgument

                //Ejecucion por Ninject
                IWorkflowWizardGeneric _sm = (IWorkflowWizardGeneric)StateMachineManager;
                _sm.TryFireTriggerParam(Action, arg);
            }
            catch (Exception e)
            {
                throw (e.InnerException != null) ? e.InnerException : e;
            }
            finally
            {
                //Como fue invocado por Reflection no invoca al Set del StateMachineManager, por lo tanto se pierde el TempData["SM"]
                ClearModelErrors(StateMachineManager_ViewModel);

                StateMachineManager = _sm;
            }
            //return sm;
        }
Ejemplo n.º 2
0
        //public bool TryFireTrigger(Trigger trigger)
        //{
        //  if (!stateMachine.CanFire(trigger))
        //  {
        //    return false;
        //  }
        //  stateMachine.Fire(trigger);
        //  return true;
        //}

        public bool TryFireTriggerParam(Triggers.UserWizard trigger, Hashtable arg)
        {
            switch (trigger)
            {
            case Triggers.UserWizard.Next:
            {
                stateMachine.Fire(paramNextTrigger, arg);
                break;
            }

            case Triggers.UserWizard.Previous:
            {
                stateMachine.Fire(paramPrevTrigger, arg);
                break;
            }

            case Triggers.UserWizard.New:
            {
                stateMachine.Fire(paramNewTrigger, arg);
                break;
            }
            }
            return(true);
        }