11// Copyright (c) Six Labors.
22// Licensed under the Apache License, Version 2.0.
33
4+ using System . Collections . Generic ;
5+ using System . Linq ;
46using System . Reflection ;
57using Microsoft . Extensions . DependencyInjection ;
68using SixLabors . ImageSharp . Web . Caching ;
@@ -40,6 +42,8 @@ private static bool IsServiceImplementationFactory<TService, TImplementation>(Se
4042 ( descriptor . ImplementationFactory ? . GetMethodInfo ( ) . ReturnType == typeof ( TImplementation ) ||
4143 descriptor . ImplementationFactory ? . Invoke ( null ) ? . GetType ( ) == typeof ( TImplementation ) ) ; // OK to invoke the factory in tests
4244
45+ private static IReadOnlyList < ServiceDescriptor > GetCollection < T > ( IServiceCollection serviceDescriptors ) => serviceDescriptors . Where ( x => x . ServiceType == typeof ( T ) ) . ToList ( ) ;
46+
4347 [ Fact ]
4448 public void DefaultServicesAreRegistered ( )
4549 {
@@ -174,6 +178,24 @@ public void CanAddRemoveImageProviders()
174178 Assert . DoesNotContain ( services , IsService < IImageProvider , MockImageProvider > ) ;
175179 }
176180
181+ [ Fact ]
182+ public void CanInsertRemoveImageProviders ( )
183+ {
184+ var services = new ServiceCollection ( ) ;
185+ IImageSharpBuilder builder = services . AddImageSharp ( ) ;
186+
187+ builder . InsertProvider < MockImageProvider > ( 0 ) ;
188+ Assert . Single ( services , IsService < IImageProvider , MockImageProvider > ) ;
189+ Assert . Single ( services , IsServiceImplementationType < IImageProvider , MockImageProvider > ) ;
190+
191+ IReadOnlyList < ServiceDescriptor > providers = GetCollection < IImageProvider > ( services ) ;
192+ Assert . Equal ( 2 , providers . Count ) ;
193+ Assert . True ( IsService < IImageProvider , MockImageProvider > ( providers [ 0 ] ) ) ;
194+
195+ builder . RemoveProvider < MockImageProvider > ( ) ;
196+ Assert . DoesNotContain ( services , IsService < IImageProvider , MockImageProvider > ) ;
197+ }
198+
177199 [ Fact ]
178200 public void CanAddRemoveFactoryImageProviders ( )
179201 {
@@ -188,6 +210,25 @@ public void CanAddRemoveFactoryImageProviders()
188210 Assert . DoesNotContain ( services , IsService < IImageProvider , MockImageProvider > ) ;
189211 }
190212
213+ [ Fact ]
214+ public void CanInsertRemoveFactoryImageProviders ( )
215+ {
216+ var services = new ServiceCollection ( ) ;
217+ IImageSharpBuilder builder = services . AddImageSharp ( ) ;
218+
219+ builder . InsertProvider ( 0 , _ => new MockImageProvider ( ) ) ;
220+ Assert . Single ( services , IsService < IImageProvider , MockImageProvider > ) ;
221+ Assert . Single ( services , IsServiceImplementationFactory < IImageProvider , MockImageProvider > ) ;
222+
223+ IReadOnlyList < ServiceDescriptor > providers = GetCollection < IImageProvider > ( services ) ;
224+ Assert . Equal ( 2 , providers . Count ) ;
225+ Assert . True ( IsService < IImageProvider , MockImageProvider > ( providers [ 0 ] ) ) ;
226+ Assert . True ( IsServiceImplementationFactory < IImageProvider , MockImageProvider > ( providers [ 0 ] ) ) ;
227+
228+ builder . RemoveProvider < MockImageProvider > ( ) ;
229+ Assert . DoesNotContain ( services , IsService < IImageProvider , MockImageProvider > ) ;
230+ }
231+
191232 [ Fact ]
192233 public void CanAddRemoveAllImageProviders ( )
193234 {
0 commit comments