// 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. }
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); }
//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); } }); }