コード例 #1
0
        // GET: Base
        public ActionResult LoadWizard(States.UserWizard step)
        {
            RegisterViewModel model = new RegisterViewModel();

            model.UserName        = "******";
            model.Password        = "******";
            model.ConfirmPassword = "******";
            model.Rol             = "Admin";
            Hashtable Response = StepInit(step, model);

            return(View((string)Response["Step"], (T)Response["Model"])); //TODO: Ejemplo de instanciacion del Workflow.
        }
コード例 #2
0
        private Hashtable StepInit(States.UserWizard _step, RegisterViewModel model)
        {
            #region Documentacion Reflection. Crear instancias, ejecutar, todo Generic
            //Ejemplo de call Constructor de clase por Reflection para cuando no tenemos IoC
            //_sm = (W)Activator.CreateInstance(typeof(W), new object[] { States.UserWizard.Init });

            //Levanta la implementacion de una interface(W) por Ninject.
            //Crea la Instancia definida en el module con parametros fijos.
            //W _sm = (W)DependencyResolver.Current.GetService(typeof(W));

            // Invoke por Reflection del metodo de la Factory para pasarle por parametro el valor determinado en runtime
            // F _smFactory = (F)DependencyResolver.Current.GetService(typeof(F));
            //MethodInfo CreateWorkflowMethod = _smFactory.GetType().GetMethod("CreateWorkflow");
            //W _sm = (W) CreateWorkflowMethod.Invoke(_smFactory, new object[] { "Init" });
            #endregion

            //Creo la Factory de F(WorkflowFactory) por Ninject. La Factory la arme para que me devuelva un IworkflowGeneric
            IWorkflowWizardGenericFactory _smFactory = (IWorkflowWizardGenericFactory)DependencyResolver.Current.GetService(typeof(F));
            // W tiene que extender de la interfaz IWorkflowGeneric
            _sm = (W)_smFactory.CreateWorkflow(_step);
            //Ninject hace la magia. Crea un FactoryPattern para que se puedan setear atributos al constructor

            //Guardo la SM instanciada por Reflection en TempData para proximas invocaciones
            StateMachineManager = _sm;

            //Borro el modelo de datos ya que estamos haciendo una nueva instancia.
            //if (model == null) TempData["Model"] = null;
            //else TempData["Model"] = model;

            TempData["Model"] = model;

            ViewBag.PermittedTriggers = StateMachineManager_PermittedTriggers;

            Hashtable Response = new Hashtable();
            Response["Model"] = model;
            Response["Step"]  = StateMachineManager_GetState;

            return(Response);
        }
コード例 #3
0
        //public WizardUser()
        //    : this(States.UserWizard.Init)
        //{
        //}
        public WizardUser(States.UserWizard _state)
        {
            stateMachine = new StateMachine <States.UserWizard, Triggers.UserWizard>(_state);

            paramNextTrigger = stateMachine.SetTriggerParameters <Hashtable>(Triggers.UserWizard.Next);
            paramPrevTrigger = stateMachine.SetTriggerParameters <Hashtable>(Triggers.UserWizard.Previous);
            paramNewTrigger  = stateMachine.SetTriggerParameters <Hashtable>(Triggers.UserWizard.New);

            stateMachine.Configure(States.UserWizard.Init)
            .OnEntry(() => { if (OnInitEntry != null)
                             {
                                 OnInitEntry();
                             }
                     })
            .OnExit(() => { if (OnInitExit != null)
                            {
                                OnInitExit();
                            }
                    })
            .PermitDynamicIf(paramNextTrigger, (s) => States.UserWizard.Step1, () => { if (GuardClauseFromInitToStep1UsingTriggerNext != null)
                                                                                       {
                                                                                           return(GuardClauseFromInitToStep1UsingTriggerNext());
                                                                                       }
                                                                                       return(true); })
            ;
            stateMachine.Configure(States.UserWizard.Step1)
            .OnEntry(() => { if (OnStep1Entry != null)
                             {
                                 OnStep1Entry();
                             }
                     })
            .OnExit(() => { if (OnStep1Exit != null)
                            {
                                OnStep1Exit();
                            }
                    })
            .PermitDynamicIf(paramPrevTrigger, (s) => States.UserWizard.Init, () => { if (GuardClauseFromStep1ToInitUsingTriggerPrevious != null)
                                                                                      {
                                                                                          return(GuardClauseFromStep1ToInitUsingTriggerPrevious());
                                                                                      }
                                                                                      return(true); })
            .PermitDynamicIf(paramNextTrigger, (s) => States.UserWizard.Step2, () => { if (GuardClauseFromStep1ToStep2UsingTriggerNext != null)
                                                                                       {
                                                                                           return(GuardClauseFromStep1ToStep2UsingTriggerNext());
                                                                                       }
                                                                                       return(true); })
            ;
            stateMachine.Configure(States.UserWizard.Step2)
            .OnEntry(() => { if (OnStep2Entry != null)
                             {
                                 OnStep2Entry();
                             }
                     })
            .OnExit(() => { if (OnStep2Exit != null)
                            {
                                OnStep2Exit();
                            }
                    })
            .PermitDynamicIf(paramPrevTrigger, (s) => States.UserWizard.Step1, () => { if (GuardClauseFromStep2ToStep1UsingTriggerPrevious != null)
                                                                                       {
                                                                                           return(GuardClauseFromStep2ToStep1UsingTriggerPrevious());
                                                                                       }
                                                                                       return(true); })
            //PermitDynamic con Parametros / Funcion
            .PermitDynamicIf(paramNextTrigger, (s) => { return(DestinationSelectorByStep2toFinish(s)); }, () => { if (GuardClauseFromStep2ToFinishUsingTriggerPrevious != null)
                                                                                                                  {
                                                                                                                      return(GuardClauseFromStep2ToFinishUsingTriggerPrevious());
                                                                                                                  }
                                                                                                                  return(true); })
            //.PermitDynamic(paramNextTrigger, (s) => { return DestinationSelectorByStep2toFinish(s); })
            ;

            stateMachine.Configure(States.UserWizard.Finish)
            .OnEntry(() => { if (OnFinishEntry != null)
                             {
                                 OnFinishEntry();
                             }
                     })
            //Si entra al Finish con Parametros, ejecuta la Funcion
            .OnEntryFrom(paramNextTrigger, (s) =>
            {
                if (OnFinishEntryParam != null)
                {
                    OnFinishEntryParam(s);
                }
            })
            //
            .OnExit(() => { if (OnFinishExit != null)
                            {
                                OnFinishExit();
                            }
                    })
            .PermitDynamicIf(paramNewTrigger, (s) => States.UserWizard.Init, () => { if (GuardClauseFromFinishToInitUsingTriggerNew != null)
                                                                                     {
                                                                                         return(GuardClauseFromFinishToInitUsingTriggerNew());
                                                                                     }
                                                                                     return(true); })
            ;
            stateMachine.OnUnhandledTrigger((state, trigger) => { if (OnUnhandledTrigger != null)
                                                                  {
                                                                      OnUnhandledTrigger(state, trigger);
                                                                  }
                                            });
        }