示例#1
0
        private void AddResponseHandlers(RestClientSettings settings, IBuildContext context)
        {
            if (requestHandlers != null)
            {
                foreach (var handler in responseHandlers)
                {
                    var requestHandler = handler.Instance as IRestResponseHandler;
                    if (handler.Type != null)
                    {
                        requestHandler = context.Resolve(handler.Type) as IRestResponseHandler;
                    }

                    settings.ResponseHandlers.Add(requestHandler);
                }
            }
        }
示例#2
0
        public IBranchActivity Build(IBuildContext context)
        {
            if (Activities.Count == 0)
            {
                throw new InvalidOperationException("At least one activity must be defined in a branch");
            }
            if (Strategy == null)
            {
                throw new InvalidOperationException();
            }

            var activities = Activities.Select(x => x.Build(context)).ToList();

            if (activities.Count == 1 &&
                activities[0] is MergeActivity)
            {
                throw new InvalidOperationException();
            }

            if (Factory)
            {
                if (StateFactory == null &&
                    StateFactoryType == null)
                {
                    throw new InvalidOperationException();
                }

                var stateFactory = StateFactory;

                if (stateFactory == null && context == null)
                {
                    throw new NotSupportedException();
                }

                if (stateFactory == null)
                {
                    stateFactory = context.Resolve(StateFactoryType) as IStateFactory;
                }

                return(new BranchFactoryActivity(Name, Decision, activities, stateFactory));
            }


            return(new BranchActivity(Name, Decision, Strategy, activities));
        }
示例#3
0
        private void AddSerializers(RestClientSettings settings, IBuildContext context)
        {
            if (serializers != null)
            {
                settings.Serializers.Clear();

                foreach (var handler in serializers)
                {
                    var requestHandler = handler.Instance as IContentSerializer;
                    if (handler.Type != null)
                    {
                        requestHandler = context.Resolve(handler.Type) as IContentSerializer;
                    }

                    settings.Serializers.Add(requestHandler);
                }
            }
        }
示例#4
0
        public IActivity Build(IBuildContext context)
        {
            if (!OptionSet)
            {
                throw new ActivityBuildException("No valid option was set for the build of an activity");
            }

            try {
                IActivity activity;

                if (ActivityType != null)
                {
                    if (context == null)
                    {
                        throw new ActivityResolveException(ActivityType, "The builder references a type that cannot be resolved outside a context");
                    }

                    activity = (IActivity)context.Resolve(ActivityType);

                    if (activity == null)
                    {
                        throw new ActivityResolveException(ActivityType, $"The type '{ActivityType}' is not a valid instance of {typeof(IActivity)}");
                    }
                }
                else if (ProxyActivity != null)
                {
                    activity = ProxyActivity;
                }
                else if (ActivityBranchBuilder != null)
                {
                    activity = ActivityBranchBuilder.Build(context);
                }
                else
                {
                    activity = new Activity(Name, Decision, Execution);

                    if (Metadata != null)
                    {
                        ((Activity)activity).SetMetadata(Metadata);
                    }
                }

                if (Factory)
                {
                    if (StateFactory == null &&
                        StateFactoryType == null)
                    {
                        throw new InvalidOperationException("Invalid setup for a state factory");
                    }

                    var factory = StateFactory;
                    if (factory == null && StateFactoryType != null)
                    {
                        factory = context.Resolve(StateFactoryType) as IStateFactory;
                    }

                    activity = new ActivityFactoryActivity(Name, Decision, activity, factory);
                }

                return(activity);
            } catch (ActivityBuildException) {
                throw;
            } catch (Exception ex) {
                throw new ActivityBuildException("Could not build the activity because of an error: see inner exception for details.", ex);
            }
        }