/// <summary>
        /// Adds the provided activity type to the builder.
        /// </summary>
        /// <param name="builder">The builder to add to, not null.</param>
        /// <param name="type">The activity type to add, not null.</param>
        /// <returns>The original builder with activity added.</returns>
        public static ITaskHubWorkerBuilder AddActivity(this ITaskHubWorkerBuilder builder, Type type)
        {
            Check.NotNull(builder, nameof(builder));

            builder.AddActivity(new TaskActivityDescriptor(type));
            return(builder);
        }
        /// <summary>
        /// Adds the provided activity type to the builder.
        /// </summary>
        /// <param name="builder">The builder to add to, not null.</param>
        /// <param name="type">The activity type to add, not null.</param>
        /// <param name="includeAliases">Include <see cref="TaskAliasAttribute"/>.</param>
        /// <returns>The original builder with activity added.</returns>
        public static ITaskHubWorkerBuilder AddActivity(
            this ITaskHubWorkerBuilder builder, Type type, bool includeAliases)
        {
            Check.NotNull(builder, nameof(builder));

            builder.AddActivity(new TaskActivityDescriptor(type));
            if (includeAliases)
            {
                foreach ((string name, string version) in type.GetTaskAliases())
                {
                    builder.AddActivity(new TaskActivityDescriptor(type, name, version));
                }
            }

            return(builder);
        }
        /// <summary>
        /// Adds the provided activity type to the builder.
        /// </summary>
        /// <param name="builder">The builder to add to, not null.</param>
        /// <param name="type">The activity type to add, not null.</param>
        /// <param name="name">The name of the activity. Not null or empty.</param>
        /// <param name="version">The version of the activity.static Not null.</param>
        /// <returns>The original builder with activity added.</returns>
        public static ITaskHubWorkerBuilder AddActivity(
            this ITaskHubWorkerBuilder builder, Type type, string name, string version)
        {
            Check.NotNull(builder, nameof(builder));
            Check.NotNullOrEmpty(name, nameof(name));
            Check.NotNull(version, nameof(version));

            builder.AddActivity(new TaskActivityDescriptor(type, name, version));
            return(builder);
        }
        /// <summary>
        /// Adds all methods from the supplied interface <paramref name="type"/> to the builder as activities.
        /// </summary>
        /// <param name="builder">The builder to add to.</param>
        /// <param name="type">The interface methods to add.</param>
        /// <returns>The original builder with activities added.</returns>
        public static ITaskHubWorkerBuilder AddActivitiesFromInterface(this ITaskHubWorkerBuilder builder, Type type)
        {
            Check.NotNull(builder, nameof(builder));
            Check.NotNull(type, nameof(type));
            Check.IsInterface(type, nameof(type));

            foreach (MethodInfo method in type.GetMethods())
            {
                builder.AddActivity(new TaskActivityDescriptor(method));
            }

            return(builder);
        }
        /// <summary>
        /// Adds all <see cref="TaskActivity"/> in the provided assembly.
        /// Includes <see cref="TaskAliasAttribute"/>.
        /// </summary>
        /// <param name="builder">The builder to add to, not null.</param>
        /// <param name="assembly">The assembly to discover types from. Not null.</param>
        /// <param name="includePrivate">True to include private/protected/internal types, false for public only.</param>
        /// <returns>The original builder with activity added.</returns>
        public static ITaskHubWorkerBuilder AddActivitiesFromAssembly(
            this ITaskHubWorkerBuilder builder, Assembly assembly, bool includePrivate = false)
        {
            Check.NotNull(builder, nameof(builder));
            Check.NotNull(assembly, nameof(assembly));

            foreach (Type type in assembly.GetConcreteTypes <TaskActivity>(includePrivate))
            {
                builder.AddActivity(type);
            }

            return(builder);
        }
 /// <summary>
 /// Adds the provided activity type to the builder.
 /// Includes <see cref="TaskAliasAttribute"/>.
 /// </summary>
 /// <param name="builder">The builder to add to, not null.</param>
 /// <typeparam name="TActivity">The activity type to add.</typeparam>
 /// <returns>The original builder with activity added.</returns>
 public static ITaskHubWorkerBuilder AddActivity <TActivity>(this ITaskHubWorkerBuilder builder)
     where TActivity : TaskActivity
 => builder.AddActivity(typeof(TActivity));
 /// <summary>
 /// Adds the provided activity type to the builder.
 /// Includes <see cref="TaskAliasAttribute"/>.
 /// </summary>
 /// <param name="builder">The builder to add to, not null.</param>
 /// <param name="type">The activity type to add, not null.</param>
 /// <returns>The original builder with activity added.</returns>
 public static ITaskHubWorkerBuilder AddActivity(this ITaskHubWorkerBuilder builder, Type type)
 => builder.AddActivity(type, includeAliases: true);
 /// <summary>
 /// Adds the provided activity type to the builder.
 /// </summary>
 /// <param name="builder">The builder to add to, not null.</param>
 /// <param name="name">The name of the activity. Not null or empty.</param>
 /// <param name="version">The version of the activity.static Not null.</param>
 /// <typeparam name="TActivity">The activity type to add.</typeparam>
 /// <returns>The original builder with activity added.</returns>
 public static ITaskHubWorkerBuilder AddActivity <TActivity>(
     this ITaskHubWorkerBuilder builder, string name, string version)
     where TActivity : TaskActivity
 => builder.AddActivity(typeof(TActivity), name, version);
 /// <summary>
 /// Adds the provided activity type to the builder.
 /// </summary>
 /// <param name="builder">The builder to add to, not null.</param>
 /// <param name="includeAliases">Include <see cref="TaskAliasAttribute"/>.</param>
 /// <typeparam name="TActivity">The activity type to add.</typeparam>
 /// <returns>The original builder with activity added.</returns>
 public static ITaskHubWorkerBuilder AddActivity <TActivity>(
     this ITaskHubWorkerBuilder builder, bool includeAliases)
     where TActivity : TaskActivity
 => builder.AddActivity(typeof(TActivity), includeAliases);