示例#1
0
        public static IResourcePipelineBuilder <TResource> Task <TResource>(this IResourcePipelineBuilder <TResource> builder, Action action)
            where TResource : IResource
        {
            if (action == null)
            {
                throw new ArgumentNullException(nameof(action));
            }

            if (builder == null)
            {
                throw new ArgumentNullException(nameof(builder));
            }

            return(builder.Task(next => { action(); return ctx => next(ctx); }));
        }
示例#2
0
        public static IResourcePipelineBuilder <TResource> Task <TResource>(this IResourcePipelineBuilder <TResource> builder, Type pipelineTaskType)
            where TResource : IResource
        {
            if (!typeof(IPipelineTask <TResource>).GetTypeInfo().IsAssignableFrom(pipelineTaskType))
            {
                throw new ArgumentException($"Type must implement {nameof(IPipelineTask<TResource>)}", nameof(pipelineTaskType));
            }

            if (!(builder is ResourcePipelineBuilder <TResource> pipelineBuilder))
            {
                throw new ArgumentException($"{nameof(builder)} must be {nameof(ResourcePipelineBuilder<TResource>)} instance", nameof(builder));
            }

            var task = (IPipelineTask <TResource>)ActivatorUtilities.CreateInstance(pipelineBuilder._scope.ServiceProvider, pipelineTaskType);

            if (task is IDisposable disposable)
            {
                pipelineBuilder._disposables.Add(disposable);
            }

            return(pipelineBuilder.Task(next => async context => {
                await task.InvokeAsync(context, next).ConfigureAwait(false);
            }));
        }
示例#3
0
 public static IResourcePipelineBuilder <TResource> Task <TResource, TPipelineTask>(this IResourcePipelineBuilder <TResource> builder)
     where TResource : IResource
     where TPipelineTask : IPipelineTask <TResource>
 => builder.Task(typeof(TPipelineTask));