/// <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); }
/// <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)); }
/// <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)); }
/// <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); }
/// <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); }
/// <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); }
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); }
/// <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); }
/// <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)); }
/// <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)); }
/// <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)) { } }