Пример #1
0
 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>();
 }
Пример #2
0
        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));
            }
        }
Пример #3
0
        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()));
        }