public ServiceWorkflow(S Service, OperationArgParser Parser, params OperationExecSpec[] Steps) : base(Steps) { this.Service = Service; Invocations = rolist(this.Describe <S>().Where(x => x.IsSome()).Values()); this.ServiceDescription = ClrInterfaceDescription.Create <S>(); }
public static IEnumerable <IOption> Execute <T>(this OperationWorkflow workflow, T host, OperationArgParser parser = null) { var requested = Describe <T>(workflow); foreach (var i in requested.Where(i => i.IsNone())) { yield return(i); } var available = requested.Where(i => i.Exists).Select(i => i.Require()).ToList(); foreach (var invocation in available) { yield return(Execute(invocation, host, parser)); } }
public static IOption Execute(this ClrMethodCallDescription description, object host, OperationArgParser parser = null) { var parse = parser ?? DefaultParser; var method = description.Operation.Method; var args = description.Arguments; var argValues = map(args, arg => (arg.ParameterName.ToString(), parse(arg.ParameterType, arg.ArgumentValue))); return((IOption)method.ReflectedElement.Invoke(host, argValues.Select(x => x.Item2).ToArray())); }