Пример #1
0
        /// <summary>
        /// Sets the given <see cref="MemoryAllocator"/> adding it to the service collection.
        /// </summary>
        /// <param name="builder">The core builder.</param>
        /// <param name="implementationFactory">The factory method for returning a <see cref="MemoryAllocator"/>.</param>
        /// <returns>The <see cref="IImageSharpBuilder"/>.</returns>
        public static IImageSharpBuilder SetMemoryAllocator(this IImageSharpBuilder builder, Func <IServiceProvider, MemoryAllocator> implementationFactory)
        {
            var descriptor = new ServiceDescriptor(typeof(MemoryAllocator), implementationFactory, ServiceLifetime.Singleton);

            builder.Services.Replace(descriptor);
            return(builder);
        }
Пример #2
0
        /// <summary>
        /// Adds ImageSharp services to the specified <see cref="IServiceCollection" /> with the default options.
        /// </summary>
        /// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
        /// <returns>An <see cref="IImageSharpBuilder"/> that can be used to further configure the ImageSharp services.</returns>
        public static IImageSharpBuilder AddImageSharp(this IServiceCollection services)
        {
            IImageSharpBuilder builder = AddImageSharpCore(services);

            AddDefaultServices(builder);

            return(new ImageSharpBuilder(builder.Services));
        }
Пример #3
0
        /// <summary>
        /// Adds ImageSharp services to the specified <see cref="IServiceCollection" /> with the given options.
        /// </summary>
        /// <param name="services">The <see cref="IServiceCollection" /> to add services to.</param>
        /// <param name="setupAction">An <see cref="Action{ImageSharpMiddlewareOptions}"/> to configure the provided <see cref="ImageSharpMiddlewareOptions"/>.</param>
        /// <returns>An <see cref="IImageSharpBuilder"/> that can be used to further configure the ImageSharp services.</returns>
        public static IImageSharpBuilder AddImageSharp(this IServiceCollection services, Action <ImageSharpMiddlewareOptions> setupAction)
        {
            IImageSharpBuilder builder = AddImageSharpCore(services, setupAction);

            AddDefaultServices(builder);

            return(new ImageSharpBuilder(builder.Services));
        }
Пример #4
0
        /// <summary>
        /// Sets the given <see cref="IRequestParser"/> adding it to the service collection.
        /// </summary>
        /// <typeparam name="TParser">The type of class implementing <see cref="IRequestParser"/>to add.</typeparam>
        /// <param name="builder">The core builder.</param>
        /// <returns>The <see cref="IImageSharpBuilder"/>.</returns>
        public static IImageSharpBuilder SetRequestParser <TParser>(this IImageSharpBuilder builder)
            where TParser : class, IRequestParser
        {
            var descriptor = new ServiceDescriptor(typeof(IRequestParser), typeof(TParser), ServiceLifetime.Singleton);

            builder.Services.Replace(descriptor);
            return(builder);
        }
Пример #5
0
        /// <summary>
        /// Sets the given <see cref="MemoryAllocator"/> adding it to the service collection.
        /// </summary>
        /// <typeparam name="TMemoryAllocator">The type of class implementing <see cref="MemoryAllocator"/>to add.</typeparam>
        /// <param name="builder">The core builder.</param>
        /// <returns>The <see cref="IImageSharpBuilder"/>.</returns>
        public static IImageSharpBuilder SetMemoryAllocator <TMemoryAllocator>(this IImageSharpBuilder builder)
            where TMemoryAllocator : MemoryAllocator
        {
            var descriptor = new ServiceDescriptor(typeof(MemoryAllocator), typeof(TMemoryAllocator), ServiceLifetime.Singleton);

            builder.Services.Replace(descriptor);
            return(builder);
        }
Пример #6
0
        /// <summary>
        /// Sets the given <see cref="IImageCache"/> adding it to the service collection.
        /// </summary>
        /// <typeparam name="TCache">The type of class implementing <see cref="IImageCache"/>to add.</typeparam>
        /// <param name="builder">The core builder.</param>
        /// <returns>The <see cref="IImageSharpBuilder"/>.</returns>
        public static IImageSharpBuilder SetCache <TCache>(this IImageSharpBuilder builder)
            where TCache : class, IImageCache
        {
            var descriptor = new ServiceDescriptor(typeof(IImageCache), typeof(TCache), ServiceLifetime.Singleton);

            builder.Services.Replace(descriptor);
            return(builder);
        }
Пример #7
0
        protected void ConfigureServices(IServiceCollection services)
        {
            IImageSharpBuilder builder = services.AddImageSharp(options =>
            {
                Func <ImageCommandContext, Task> onParseCommandsAsync = options.OnParseCommandsAsync;

                options.OnParseCommandsAsync = context =>
                {
                    Assert.NotNull(context);
                    Assert.NotNull(context.Context);
                    Assert.NotNull(context.Commands);
                    Assert.NotNull(context.Parser);

                    return(onParseCommandsAsync.Invoke(context));
                };

                Func <ImageProcessingContext, Task> onProcessedAsync = options.OnProcessedAsync;

                options.OnProcessedAsync = context =>
                {
                    Assert.NotNull(context);
                    Assert.NotNull(context.Commands);
                    Assert.NotNull(context.ContentType);
                    Assert.NotNull(context.Context);
                    Assert.NotNull(context.Extension);
                    Assert.NotNull(context.Stream);

                    return(onProcessedAsync.Invoke(context));
                };

                Func <FormattedImage, Task> onBeforeSaveAsync = options.OnBeforeSaveAsync;

                options.OnBeforeSaveAsync = context =>
                {
                    Assert.NotNull(context);
                    Assert.NotNull(context.Format);
                    Assert.NotNull(context.Encoder);
                    Assert.NotNull(context.Image);

                    return(onBeforeSaveAsync.Invoke(context));
                };

                Func <HttpContext, Task> onPrepareResponseAsync = options.OnPrepareResponseAsync;

                options.OnPrepareResponseAsync = context =>
                {
                    Assert.NotNull(context);
                    Assert.NotNull(context.Response);

                    return(onPrepareResponseAsync.Invoke(context));
                };
            })
                                         .ClearProviders()
                                         .AddProcessor <CacheBusterWebProcessor>();

            this.ConfigureCustomServices(services, builder);
        }
Пример #8
0
        /// <summary>
        /// Sets the the memory allocator configured in <see cref="Configuration.MemoryAllocator"/> of <see cref="ImageSharpMiddlewareOptions.Configuration"/>.
        /// </summary>
        /// <param name="builder">The core builder.</param>
        /// <returns>The <see cref="IImageSharpBuilder"/>.</returns>
        internal static IImageSharpBuilder SetMemoryAllocatorFromMiddlewareOptions(this IImageSharpBuilder builder)
        {
            MemoryAllocator AllocatorFactory(IServiceProvider s)
            {
                return(s.GetRequiredService <IOptions <ImageSharpMiddlewareOptions> >().Value.Configuration.MemoryAllocator);
            }

            builder.SetMemoryAllocator(AllocatorFactory);
            return(builder);
        }
Пример #9
0
        /// <summary>
        /// Sets the the <see cref="FormatUtilities"/> configured by <see cref="ImageSharpMiddlewareOptions.Configuration"/>.
        /// </summary>
        /// <param name="builder">The core builder.</param>
        /// <returns>The <see cref="IImageSharpBuilder"/>.</returns>
        internal static IImageSharpBuilder SetFormatUtilitesFromMiddlewareOptions(this IImageSharpBuilder builder)
        {
            FormatUtilities FormatUtilitiesFactory(IServiceProvider s)
            {
                return(new FormatUtilities(s.GetRequiredService <IOptions <ImageSharpMiddlewareOptions> >().Value.Configuration));
            }

            builder.Services.AddSingleton(FormatUtilitiesFactory);
            return(builder);
        }
        public void CanAddRemoveAllFactoryCommandConverters()
        {
            var services = new ServiceCollection();
            IImageSharpBuilder builder = services.AddImageSharp();

            builder.AddConverter(_ => new MockCommandConverter());
            Assert.Single(services, IsService <ICommandConverter, MockCommandConverter>);
            Assert.Single(services, IsServiceImplementationFactory <ICommandConverter, MockCommandConverter>);

            builder.ClearConverters();
            Assert.DoesNotContain(services, IsService <ICommandConverter>);
        }
        public void CanAddRemoveCommandConverters()
        {
            var services = new ServiceCollection();
            IImageSharpBuilder builder = services.AddImageSharp();

            builder.AddConverter <MockCommandConverter>();
            Assert.Single(services, IsService <ICommandConverter, MockCommandConverter>);
            Assert.Single(services, IsServiceImplementationType <ICommandConverter, MockCommandConverter>);

            builder.RemoveConverter <MockCommandConverter>();
            Assert.DoesNotContain(services, IsService <ICommandConverter, MockCommandConverter>);
        }
        public void CanAddRemoveAllFactoryImageProcessors()
        {
            var services = new ServiceCollection();
            IImageSharpBuilder builder = services.AddImageSharp();

            builder.AddProcessor(_ => new MockWebProcessor());
            Assert.Single(services, IsService <IImageWebProcessor, MockWebProcessor>);
            Assert.Single(services, IsServiceImplementationFactory <IImageWebProcessor, MockWebProcessor>);

            builder.ClearProcessors();
            Assert.DoesNotContain(services, IsService <IImageWebProcessor>);
        }
        public void CanAddRemoveImageProcessors()
        {
            var services = new ServiceCollection();
            IImageSharpBuilder builder = services.AddImageSharp();

            builder.AddProcessor <MockWebProcessor>();
            Assert.Single(services, IsService <IImageWebProcessor, MockWebProcessor>);
            Assert.Single(services, IsServiceImplementationType <IImageWebProcessor, MockWebProcessor>);

            builder.RemoveProcessor <MockWebProcessor>();
            Assert.DoesNotContain(services, IsService <IImageWebProcessor, MockWebProcessor>);
        }
        public void CanAddRemoveAllImageProviders()
        {
            var services = new ServiceCollection();
            IImageSharpBuilder builder = services.AddImageSharp();

            builder.AddProvider <MockImageProvider>();
            Assert.Single(services, IsService <IImageProvider, MockImageProvider>);
            Assert.Single(services, IsServiceImplementationType <IImageProvider, MockImageProvider>);

            builder.ClearProviders();
            Assert.DoesNotContain(services, IsService <IImageProvider>);
        }
        public void CanAddRemoveFactoryImageProviders()
        {
            var services = new ServiceCollection();
            IImageSharpBuilder builder = services.AddImageSharp();

            builder.AddProvider(_ => new MockImageProvider());
            Assert.Single(services, IsService <IImageProvider, MockImageProvider>);
            Assert.Single(services, IsServiceImplementationFactory <IImageProvider, MockImageProvider>);

            builder.RemoveProvider <MockImageProvider>();
            Assert.DoesNotContain(services, IsService <IImageProvider, MockImageProvider>);
        }
        /// <summary>
        /// Inserts the given <see cref="IImageProvider"/>  at the give index into the provider collection within the service collection.
        /// </summary>
        /// <typeparam name="TProvider">The type of class implementing <see cref="IImageProvider"/>to add.</typeparam>
        /// <param name="builder">The core builder.</param>
        /// <param name="index">The zero-based index at which the provider should be inserted.</param>
        /// <param name="implementationFactory">The factory method for returning a <see cref="IImageProvider"/>.</param>
        /// <returns>The <see cref="IImageSharpBuilder"/>.</returns>
        public static IImageSharpBuilder InsertProvider <TProvider>(this IImageSharpBuilder builder, int index, Func <IServiceProvider, TProvider> implementationFactory)
            where TProvider : class, IImageProvider
        {
            var descriptors = builder.Services.Where(x => x.ServiceType == typeof(IImageProvider)).ToList();

            builder.ClearProviders();

            descriptors.Insert(index, ServiceDescriptor.Singleton <IImageProvider>(implementationFactory));

            builder.Services.TryAddEnumerable(descriptors);
            return(builder);
        }
        public void CanAddRemoveAllCommandConverters()
        {
            var services = new ServiceCollection();

            IImageSharpBuilder builder = services.AddImageSharp()
                                         .AddConverter <MockCommandConverter>();

            Assert.Contains(services, x => x.ImplementationType == typeof(MockCommandConverter));

            builder.ClearConverters();

            Assert.DoesNotContain(services, x => x.ImplementationType == typeof(MockCommandConverter));
        }
        public void CanSetCacheHash()
        {
            var services = new ServiceCollection();
            IImageSharpBuilder builder = services.AddImageSharp();

            builder.SetCacheHash <MockCacheHash>();
            Assert.Single(services, IsService <ICacheHash>);
            Assert.Single(services, IsServiceImplementationType <ICacheHash, MockCacheHash>);

            builder.SetCacheHash(_ => new MockCacheHash());
            Assert.Single(services, IsService <ICacheHash>);
            Assert.Single(services, IsServiceImplementationFactory <ICacheHash, MockCacheHash>);
        }
        public void CanSetRequestParser()
        {
            var services = new ServiceCollection();
            IImageSharpBuilder builder = services.AddImageSharp();

            builder.SetRequestParser <MockRequestParser>();
            Assert.Single(services, IsService <IRequestParser>);
            Assert.Single(services, IsServiceImplementationType <IRequestParser, MockRequestParser>);

            builder.SetRequestParser(_ => new MockRequestParser());
            Assert.Single(services, IsService <IRequestParser>);
            Assert.Single(services, IsServiceImplementationFactory <IRequestParser, MockRequestParser>);
        }
        public void CanAddRemoveAllImageProcessors()
        {
            var services = new ServiceCollection();

            IImageSharpBuilder builder = services.AddImageSharp()
                                         .AddProcessor <MockWebProcessor>();

            Assert.Contains(services, x => x.ImplementationType == typeof(MockWebProcessor));

            builder.ClearProcessors();

            Assert.DoesNotContain(services, x => x.ImplementationType == typeof(MockWebProcessor));
        }
        public void CanAddRemoveImageProviders()
        {
            var services = new ServiceCollection();

            IImageSharpBuilder builder = services.AddImageSharp()
                                         .AddProvider <MockImageProvider>();

            Assert.Contains(services, x => x.ImplementationType == typeof(MockImageProvider));

            builder.RemoveProvider <MockImageProvider>();

            Assert.DoesNotContain(services, x => x.ImplementationType == typeof(MockImageProvider));
        }
Пример #22
0
        /// <summary>
        /// Adds the default service to the service collection.
        /// </summary>
        /// <param name="builder">The <see cref="IImageSharpBuilder"/> that can be used to further configure the ImageSharp services.</param>
        private static void AddDefaultServices(IImageSharpBuilder builder)
        {
            builder.SetRequestParser <QueryCollectionRequestParser>();

            builder.SetCache <PhysicalFileSystemCache>();

            builder.SetCacheHash <CacheHash>();

            builder.AddProvider <PhysicalFileSystemProvider>();

            builder.AddProcessor <ResizeWebProcessor>()
            .AddProcessor <FormatWebProcessor>()
            .AddProcessor <BackgroundColorWebProcessor>();
        }
        public void CanAddRemoveAllFactoryImageProviders()
        {
            var services = new ServiceCollection();

            IImageSharpBuilder builder = services.AddImageSharp()
                                         .AddProvider(_ => new MockImageProvider());

            Assert.DoesNotContain(services, x => x.ImplementationType == typeof(MockImageProvider));

            Assert.Contains(services, x => x.ImplementationFactory?.Method.ReturnType == typeof(MockImageProvider));

            builder.ClearProviders();

            Assert.DoesNotContain(services, x => x.ImplementationFactory?.Method.ReturnType == typeof(MockImageProvider));
        }
Пример #24
0
        /// <summary>
        /// Removes the given <see cref="IImageWebProcessor"/> from the processor collection within the service collection.
        /// </summary>
        /// <typeparam name="TProcessor">The type of class implementing <see cref="IImageWebProcessor"/>to add.</typeparam>
        /// <param name="builder">The core builder.</param>
        /// <returns>The <see cref="IImageSharpBuilder"/>.</returns>
        public static IImageSharpBuilder RemoveProcessor <TProcessor>(this IImageSharpBuilder builder)
            where TProcessor : class, IImageWebProcessor
        {
            ServiceDescriptor descriptor = builder.Services.FirstOrDefault(x =>
                                                                           x.ServiceType == typeof(IImageWebProcessor) &&
                                                                           x.Lifetime == ServiceLifetime.Singleton &&
                                                                           x.ImplementationType == typeof(TProcessor));

            if (descriptor != null)
            {
                builder.Services.Remove(descriptor);
            }

            return(builder);
        }
        public void CanAddRemoveFactoryCommandConverters()
        {
            var services = new ServiceCollection();

            IImageSharpBuilder builder = services.AddImageSharp()
                                         .AddConverter(_ => new MockCommandConverter());

            Assert.DoesNotContain(services, x => x.ImplementationType == typeof(MockCommandConverter));

            Assert.Contains(services, x => x.ImplementationFactory?.Method.ReturnType == typeof(MockCommandConverter));

            builder.RemoveConverter <MockCommandConverter>();

            Assert.DoesNotContain(services, x => x.ImplementationFactory?.Method.ReturnType == typeof(MockCommandConverter));
        }
        /// <summary>
        /// Removes the given <see cref="IImageProvider"/> from the provider collection within the service collection.
        /// </summary>
        /// <typeparam name="TProvider">The type of class implementing <see cref="IImageProvider"/>to add.</typeparam>
        /// <param name="builder">The core builder.</param>
        /// <returns>The <see cref="IImageSharpBuilder"/>.</returns>
        public static IImageSharpBuilder RemoveProvider <TProvider>(this IImageSharpBuilder builder)
            where TProvider : class, IImageProvider
        {
            ServiceDescriptor descriptor = builder.Services.FirstOrDefault(x =>
                                                                           x.ServiceType == typeof(IImageProvider) &&
                                                                           (x.ImplementationType == typeof(TProvider) ||
                                                                            (x.ImplementationFactory?.GetMethodInfo().ReturnType == typeof(TProvider))));

            if (descriptor != null)
            {
                builder.Services.Remove(descriptor);
            }

            return(builder);
        }
        /// <summary>
        /// Removes the given <see cref="ICommandConverter"/> from the converter collection within the service collection.
        /// </summary>
        /// <typeparam name="TConverter">The type of class implementing <see cref="ICommandConverter"/>to add.</typeparam>
        /// <param name="builder">The core builder.</param>
        /// <returns>The <see cref="IImageSharpBuilder"/>.</returns>
        public static IImageSharpBuilder RemoveConverter <TConverter>(this IImageSharpBuilder builder)
            where TConverter : class, ICommandConverter
        {
            ServiceDescriptor descriptor = builder.Services.FirstOrDefault(x =>
                                                                           x.ServiceType == typeof(ICommandConverter) &&
                                                                           x.Lifetime == ServiceLifetime.Singleton &&
                                                                           (x.ImplementationType == typeof(TConverter) ||
                                                                            (x.ImplementationFactory?.GetMethodInfo().ReturnType == typeof(TConverter))));

            if (descriptor != null)
            {
                builder.Services.Remove(descriptor);
            }

            return(builder);
        }
        public void CanInsertRemoveImageProviders()
        {
            var services = new ServiceCollection();
            IImageSharpBuilder builder = services.AddImageSharp();

            builder.InsertProvider <MockImageProvider>(0);
            Assert.Single(services, IsService <IImageProvider, MockImageProvider>);
            Assert.Single(services, IsServiceImplementationType <IImageProvider, MockImageProvider>);

            IReadOnlyList <ServiceDescriptor> providers = GetCollection <IImageProvider>(services);

            Assert.Equal(2, providers.Count);
            Assert.True(IsService <IImageProvider, MockImageProvider>(providers[0]));

            builder.RemoveProvider <MockImageProvider>();
            Assert.DoesNotContain(services, IsService <IImageProvider, MockImageProvider>);
        }
        protected override void ConfigureCustomServices(IServiceCollection services, IImageSharpBuilder builder)
        => builder
        .Configure <AzureBlobStorageImageProviderOptions>(o =>
                                                          o.BlobContainers.Add(
                                                              new AzureBlobContainerClientOptions
        {
            ConnectionString = TestConstants.AzureConnectionString,
            ContainerName    = TestConstants.AzureContainerName
        }))
        .AddProvider(AzureBlobStorageImageProviderFactory.Create)
        .Configure <AzureBlobStorageCacheOptions>(o =>
        {
            o.ConnectionString = TestConstants.AzureConnectionString;
            o.ContainerName    = TestConstants.AzureCacheContainerName;

            AzureBlobStorageCache.CreateIfNotExists(o, PublicAccessType.None);
        })
        .SetCache <AzureBlobStorageCache>();
        public void CanAddRemoveImageProcessors()
        {
            void RemoveServices(IServiceCollection services)
            {
                IImageSharpBuilder builder = services.AddImageSharp()
                                             .AddProcessor <MockWebProcessor>();

                Assert.Contains(services, x => x.ImplementationType == typeof(MockWebProcessor));

                builder.RemoveProcessor <MockWebProcessor>();

                Assert.DoesNotContain(services, x => x.ImplementationType == typeof(MockWebProcessor));
            }

            using (TestServer server = ImageSharpTestServer.Create(ImageSharpTestServer.DefaultConfig, RemoveServices))
            {
            }
        }