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); }