mirror of
https://github.com/meysamhadeli/booking-microservices.git
synced 2026-04-11 19:02:15 +08:00
72 lines
2.4 KiB
C#
72 lines
2.4 KiB
C#
using Microsoft.Extensions.DependencyInjection;
|
|
using NSubstitute;
|
|
|
|
namespace BuildingBlocks.Web;
|
|
|
|
public static class ServiceCollectionExtensions
|
|
{
|
|
public static void ReplaceScoped<TService, TImplementation>(this IServiceCollection services)
|
|
where TService : class
|
|
where TImplementation : class, TService
|
|
{
|
|
services.Unregister<TService>();
|
|
services.AddScoped<TService, TImplementation>();
|
|
}
|
|
|
|
public static void ReplaceScoped<TService>(this IServiceCollection services,
|
|
Func<IServiceProvider, TService> implementationFactory)
|
|
where TService : class
|
|
{
|
|
services.Unregister<TService>();
|
|
services.AddScoped(implementationFactory);
|
|
}
|
|
|
|
public static void ReplaceTransient<TService, TImplementation>(this IServiceCollection services)
|
|
where TService : class
|
|
where TImplementation : class, TService
|
|
{
|
|
services.Unregister<TService>();
|
|
services.AddTransient<TService, TImplementation>();
|
|
}
|
|
|
|
public static void ReplaceTransient<TService>(this IServiceCollection services,
|
|
Func<IServiceProvider, TService> implementationFactory)
|
|
where TService : class
|
|
{
|
|
services.Unregister<TService>();
|
|
services.AddTransient(implementationFactory);
|
|
}
|
|
|
|
public static void ReplaceSingleton<TService, TImplementation>(this IServiceCollection services)
|
|
where TService : class
|
|
where TImplementation : class, TService
|
|
{
|
|
services.Unregister<TService>();
|
|
services.AddSingleton<TService, TImplementation>();
|
|
}
|
|
|
|
public static void ReplaceSingleton<TService>(this IServiceCollection services,
|
|
Func<IServiceProvider, TService> implementationFactory)
|
|
where TService : class
|
|
{
|
|
services.Unregister<TService>();
|
|
services.AddSingleton(implementationFactory);
|
|
}
|
|
|
|
public static void Unregister<TService>(this IServiceCollection services)
|
|
{
|
|
var descriptor = services.FirstOrDefault(d => d.ServiceType == typeof(TService));
|
|
services.Remove(descriptor);
|
|
}
|
|
|
|
public static IServiceCollection ReplaceServiceWithSingletonMock<TService>(this IServiceCollection services)
|
|
where TService : class
|
|
{
|
|
var service = services.FirstOrDefault(d => d.ServiceType == typeof(TService));
|
|
services.Remove(service);
|
|
|
|
services.AddSingleton(_ => Substitute.For<TService>());
|
|
return services;
|
|
}
|
|
}
|