using System; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Umbraco.Core.Composing; namespace Umbraco.Core { public static class ServiceCollectionExtensions { public static void AddUnique(this IServiceCollection services) where TService : class where TImplementing : class, TService => services.Replace(ServiceDescriptor.Singleton()); public static void AddUnique(this IServiceCollection services) where TImplementing : class => services.Replace(ServiceDescriptor.Singleton()); /// /// Registers a unique service with an implementation factory. /// /// Unique services have one single implementation, and a Singleton lifetime. public static void AddUnique(this IServiceCollection services, Func factory) where TService : class => services.Replace(ServiceDescriptor.Singleton(factory)); /// /// Registers a unique service with an implementing instance. /// /// Unique services have one single implementation, and a Singleton lifetime. public static void AddUnique(this IServiceCollection services, Type serviceType, object instance) => services.Replace(ServiceDescriptor.Singleton(serviceType, instance)); /// /// Registers a unique service with an implementing instance. /// public static void AddUnique(this IServiceCollection services, TService instance) where TService : class => services.Replace(ServiceDescriptor.Singleton(instance)); public static IServiceCollection AddLazySupport(this IServiceCollection services) { services.Replace(ServiceDescriptor.Transient(typeof(Lazy<>), typeof(LazyResolve<>))); return services; } } }