mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
76 lines
2.7 KiB
C#
76 lines
2.7 KiB
C#
|
using System;
|
||
|
using Microsoft.Extensions.DependencyInjection;
|
||
|
|
||
|
namespace Wabbajack.DTOs
|
||
|
{
|
||
|
public static class DependencyInjectionExtensions
|
||
|
{
|
||
|
|
||
|
public static IServiceCollection AddAllSingleton<T1, TBase>(this IServiceCollection services,
|
||
|
Func<IServiceProvider, TBase>? ctor = null)
|
||
|
where TBase : class, T1
|
||
|
where T1 : class
|
||
|
{
|
||
|
if (ctor == null)
|
||
|
services.AddSingleton<TBase>();
|
||
|
else
|
||
|
services.AddSingleton(ctor);
|
||
|
|
||
|
services.AddSingleton<T1, TBase>(s => s.GetService<TBase>()!);
|
||
|
return services;
|
||
|
}
|
||
|
public static IServiceCollection AddAllSingleton<T1, T2, TBase>(this IServiceCollection services,
|
||
|
Func<IServiceProvider, TBase>? ctor = null)
|
||
|
where TBase : class, T1, T2
|
||
|
where T1 : class
|
||
|
where T2 : class
|
||
|
{
|
||
|
if (ctor == null)
|
||
|
services.AddSingleton<TBase>();
|
||
|
else
|
||
|
services.AddSingleton(ctor);
|
||
|
|
||
|
services.AddSingleton<T1, TBase>(s => s.GetService<TBase>()!);
|
||
|
services.AddSingleton<T2, TBase>(s => s.GetService<TBase>()!);
|
||
|
return services;
|
||
|
}
|
||
|
|
||
|
public static IServiceCollection AddAllSingleton<T1, T2, T3, TBase>(this IServiceCollection services,
|
||
|
Func<IServiceProvider, TBase>? ctor = null)
|
||
|
where TBase : class, T1, T2, T3
|
||
|
where T1 : class
|
||
|
where T2 : class
|
||
|
where T3 : class
|
||
|
{
|
||
|
if (ctor == null)
|
||
|
services.AddSingleton<TBase>();
|
||
|
else
|
||
|
services.AddSingleton(ctor);
|
||
|
|
||
|
services.AddSingleton<T1, TBase>(s => s.GetService<TBase>()!);
|
||
|
services.AddSingleton<T2, TBase>(s => s.GetService<TBase>()!);
|
||
|
services.AddSingleton<T3, TBase>(s => s.GetService<TBase>()!);
|
||
|
return services;
|
||
|
}
|
||
|
|
||
|
public static IServiceCollection AddAllSingleton<T1, T2, T3, T4, TBase>(this IServiceCollection services,
|
||
|
Func<IServiceProvider, TBase>? ctor = null)
|
||
|
where TBase : class, T1, T2, T3, T4
|
||
|
where T1 : class
|
||
|
where T2 : class
|
||
|
where T3 : class
|
||
|
where T4 : class
|
||
|
{
|
||
|
if (ctor == null)
|
||
|
services.AddSingleton<TBase>();
|
||
|
else
|
||
|
services.AddSingleton(ctor);
|
||
|
|
||
|
services.AddSingleton<T1, TBase>(s => s.GetService<TBase>()!);
|
||
|
services.AddSingleton<T2, TBase>(s => s.GetService<TBase>()!);
|
||
|
services.AddSingleton<T3, TBase>(s => s.GetService<TBase>()!);
|
||
|
services.AddSingleton<T4, TBase>(s => s.GetService<TBase>()!);
|
||
|
return services;
|
||
|
}
|
||
|
}
|
||
|
}
|