/// <summary> /// Execute handler /// </summary> /// <typeparam name="TResult"></typeparam> /// <param name="process"></param> /// <param name="processType"></param> /// <param name="args"></param> /// <returns></returns> public TResult Execute <TResult>(IBaseProcess <TResult> process, Type processType, params object[] args) where TResult : VoidResult, new() { // get authorize attrigute var attributes = processType.GetCustomAttributes(typeof(SignalsAuthorizeAttribute), false).Cast <SignalsAuthorizeAttribute>().ToList(); // if no attribute is present the request is valid if (!attributes.Any()) { return(Next.Execute(process, processType, args)); } var correctMethod = false; foreach (var attribute in attributes) { // try authorize the user correctMethod |= attribute.Authorize(processType.Name); } if (!correctMethod) { return(VoidResult.FaultedResult <TResult>(new AuthorizationErrorInfo())); } return(Next.Execute(process, processType, args)); }
/// <summary> /// Execute handler /// </summary> /// <typeparam name="TResult"></typeparam> /// <param name="process"></param> /// <param name="processType"></param> /// <param name="args"></param> /// <returns></returns> public TResult Execute <TResult>(IBaseProcess <TResult> process, Type processType, params object[] args) where TResult : VoidResult, new() { var strategyHandler = SystemBootstrapper.GetInstance <IStrategyHandler>(); if (strategyHandler.IsNull() || !strategyHandler.AutoHandleErrorProcesses) { try { return(Next.Execute(process, processType, args)); } catch (Exception ex) { return(VoidResult.FaultedResult <TResult>(ex)); } } var strategyResult = strategyHandler.Execute(() => Next.Execute(process, processType, args)); if (strategyResult.Exception != null) { return(VoidResult.FaultedResult <TResult>(strategyResult.Exception)); } return(strategyResult.Result); }
/// <summary> /// Execute handler /// </summary> /// <typeparam name="TResult"></typeparam> /// <param name="process"></param> /// <param name="processType"></param> /// <param name="args"></param> /// <returns></returns> public TResult Execute <TResult>(IBaseProcess <TResult> process, Type processType, params object[] args) where TResult : VoidResult, new() { // Get guard attribute var guardAttributes = processType.GetCustomAttributes(typeof(SignalsGuardAttribute), false).Cast <SignalsGuardAttribute>().ToList(); foreach (var guardAttribute in guardAttributes) { var guardResult = guardAttribute.Check(process.BaseContext); if (guardResult != null) { return(VoidResult.FaultedResult <TResult>(guardResult)); } } return(Next.Execute(process, processType, args)); }
/// <summary> /// Handle the request /// </summary> /// <returns></returns> public TResponse Dispatch <T1, T2, T3, TResponse>(Type processType, T1 obj1, T2 obj2, T3 obj3) where TResponse : VoidResult, new() { // create instance var process = ProcessFactory.Create <TResponse>(processType); if (process.IsNull()) { return(VoidResult.FaultedResult <TResponse>()); } // execute process var response = ProcessExecutor.Execute(process, obj1, obj2, obj3); return(response); }
/// <summary> /// Handle the request /// </summary> /// <returns></returns> public TResponse Dispatch <TProcess, T1, T2, TResponse>(T1 obj1, T2 obj2) where TProcess : IBaseProcess <TResponse>, new() where TResponse : VoidResult, new() { // create instance var process = ProcessFactory.Create <TResponse>(typeof(TProcess)); if (process.IsNull()) { return(VoidResult.FaultedResult <TResponse>()); } // execute process var response = ProcessExecutor.Execute(process, obj1, obj2); return(response); }
/// <summary> /// Return faulted result /// </summary> /// <param name="voidResult"></param> /// <returns></returns> protected TResponse Fail(VoidResult voidResult) { return(VoidResult.FaultedResult <TResponse>(voidResult?.ErrorMessages?.ToArray())); }
/// <summary> /// Return faulted result /// </summary> /// <returns></returns> protected TResponse Fail() { return(VoidResult.FaultedResult <TResponse>()); }
/// <summary> /// Return faulted result /// </summary> /// <param name="failCauses"></param> /// <returns></returns> protected TResponse Fail(params IErrorInfo[] failCauses) { return(VoidResult.FaultedResult <TResponse>(failCauses)); }
/// <summary> /// Return faulted result /// </summary> /// <param name="failCause"></param> /// <returns></returns> protected TResponse Fail(Exception failCause) { return(VoidResult.FaultedResult <TResponse>(failCause)); }