diff --git a/back/src/Kyoo.Core/CoreModule.cs b/back/src/Kyoo.Core/CoreModule.cs index db5e99e1..114cddd4 100644 --- a/back/src/Kyoo.Core/CoreModule.cs +++ b/back/src/Kyoo.Core/CoreModule.cs @@ -20,7 +20,6 @@ using System; using Kyoo.Abstractions.Controllers; using Kyoo.Abstractions.Models; using Kyoo.Core.Controllers; -using Kyoo.Core.Extensions; using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; @@ -39,7 +38,8 @@ public static class CoreModule where TRepo : class, IRepository { services.AddScoped(); - services.AddScoped>(x => x.GetRequiredService()).AllowLazy(); + services.AddScoped>(x => x.GetRequiredService()); + services.AddScoped>>(x => new(() => x.GetRequiredService())); } public static void ConfigureKyoo(this WebApplicationBuilder builder) diff --git a/back/src/Kyoo.Core/Extensions/ServiceExtensions.cs b/back/src/Kyoo.Core/Extensions/ServiceExtensions.cs index a27509eb..2c92fb56 100644 --- a/back/src/Kyoo.Core/Extensions/ServiceExtensions.cs +++ b/back/src/Kyoo.Core/Extensions/ServiceExtensions.cs @@ -85,52 +85,4 @@ public static class ServiceExtensions services.AddProxies(); services.AddHttpClient(); } - - // Stollen from https://stackoverflow.com/questions/44934511/does-net-core-dependency-injection-support-lazyt - public static IServiceCollection AllowLazy(this IServiceCollection services) - { - ServiceDescriptor lastRegistration = services.Last(); - Type serviceType = lastRegistration.ServiceType; - - // The constructor for Lazy expects a Func which is hard to create dynamically. - Type lazyServiceType = typeof(Lazy<>).MakeGenericType(serviceType); - - // Create a typed MethodInfo for `serviceProvider.GetRequiredService`, - // where T has been resolved to the required ServiceType - System.Reflection.MethodInfo? getRequiredServiceMethod = typeof(ServiceProviderServiceExtensions).GetMethod( - nameof(ServiceProviderServiceExtensions.GetRequiredService), - 1, - [typeof(IServiceProvider)] - ); - - System.Reflection.MethodInfo? getRequiredServiceMethodTyped = getRequiredServiceMethod?.MakeGenericMethod( - serviceType - ); - - // Now create a lambda expression equivalent to: - // - // serviceProvider => serviceProvider.GetRequiredService(); - // - ParameterExpression parameterExpr = Expression.Parameter(typeof(IServiceProvider), "serviceLocator"); - LambdaExpression lambda = Expression.Lambda( - Expression.Call(null, getRequiredServiceMethodTyped!, parameterExpr), - parameterExpr - ); - - Delegate lambdaCompiled = lambda.Compile(); - - services.Add( - new ServiceDescriptor( - lazyServiceType, - serviceProvider => - Activator.CreateInstance( - lazyServiceType, - lambdaCompiled.DynamicInvoke(serviceProvider) - )!, - lastRegistration.Lifetime - ) - ); - - return services; - } }