From f7e1e7c89cfa368215ca68adc426121984e96c22 Mon Sep 17 00:00:00 2001 From: Viktor Kulkov Date: Wed, 12 Aug 2026 18:46:12 +0300 Subject: [PATCH] autofac generic registration --- .../ContainerBuilderRegistrationExtensions.cs | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/AppForeach.Framework.Autofac/ContainerBuilderRegistrationExtensions.cs b/src/AppForeach.Framework.Autofac/ContainerBuilderRegistrationExtensions.cs index b4ab87d..8caa43c 100644 --- a/src/AppForeach.Framework.Autofac/ContainerBuilderRegistrationExtensions.cs +++ b/src/AppForeach.Framework.Autofac/ContainerBuilderRegistrationExtensions.cs @@ -29,29 +29,37 @@ private static void RegisterContainerSpecificServices(ContainerBuilder container private static void RegisterComponent(ContainerBuilder containerBuilder, ComponentDefinition componentDefinition) { - IRegistrationBuilder builder; - if(componentDefinition.ImplementationType != null) { - builder = containerBuilder.RegisterType(componentDefinition.ImplementationType); + if (componentDefinition.ImplementationType.IsGenericType && componentDefinition.ImplementationType.ContainsGenericParameters) + { + containerBuilder.RegisterGeneric(componentDefinition.ImplementationType).ApplyServiceAndLifetime(componentDefinition); + } + else + { + containerBuilder.RegisterType(componentDefinition.ImplementationType).ApplyServiceAndLifetime(componentDefinition); + } } else if(componentDefinition.ImplementationFunction != null) { - builder = containerBuilder.Register(compContext => + containerBuilder.Register(compContext => { var serviceLocator = compContext.Resolve(); return componentDefinition.ImplementationFunction(serviceLocator); - }); + }).ApplyServiceAndLifetime(componentDefinition); } else if(componentDefinition.ImplementationInstance != null) { - builder = containerBuilder.RegisterInstance(componentDefinition.ImplementationInstance); + containerBuilder.RegisterInstance(componentDefinition.ImplementationInstance).ApplyServiceAndLifetime(componentDefinition); } else { throw new FrameworkException("Undefined component implementation"); } + } + private static void ApplyServiceAndLifetime(this IRegistrationBuilder builder, ComponentDefinition componentDefinition) + { builder = builder.As(componentDefinition.ComponentType); switch (componentDefinition.Lifetime) @@ -67,7 +75,7 @@ private static void RegisterComponent(ContainerBuilder containerBuilder, Compone break; } - if(componentDefinition.IsOptional) + if (componentDefinition.IsOptional) { builder.IfNotRegistered(componentDefinition.ComponentType); }