diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs b/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs index 61ea371a0c..73bcdd5702 100644 --- a/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using Autofac.Core; using Autofac.Extras.DynamicProxy; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Autofac; using Volo.Abp.Castle.DynamicProxy; using Volo.Abp.DependencyInjection; @@ -14,26 +15,20 @@ public static class AbpRegistrationBuilderExtensions { public static IRegistrationBuilder ConfigureAbpConventions( this IRegistrationBuilder registrationBuilder, + ServiceDescriptor serviceDescriptor, IModuleContainer moduleContainer, ServiceRegistrationActionList registrationActionList, - List> serviceActivatedActions) + ServiceActivatedActionList serviceActivatedActions) where TActivatorData : ReflectionActivatorData { + registrationBuilder = registrationBuilder.InvokeActivatedActions(serviceActivatedActions, serviceDescriptor); + var serviceType = registrationBuilder.RegistrationData.Services.OfType().FirstOrDefault()?.ServiceType; if (serviceType == null) { return registrationBuilder; } - registrationBuilder.OnActivated(context => - { - var serviceActivatedContext = new OnServiceActivatedContext(context.Instance!); - foreach (var action in serviceActivatedActions) - { - action.Invoke(serviceActivatedContext); - } - }); - var implementationType = registrationBuilder.ActivatorData.ImplementationType; if (implementationType == null) { @@ -46,6 +41,24 @@ public static class AbpRegistrationBuilderExtensions return registrationBuilder; } + private static IRegistrationBuilder InvokeActivatedActions( + this IRegistrationBuilder registrationBuilder, + ServiceActivatedActionList serviceActivatedActions, + ServiceDescriptor serviceDescriptor) + where TActivatorData : ReflectionActivatorData + { + registrationBuilder.OnActivated(context => + { + var serviceActivatedContext = new OnServiceActivatedContext(context.Instance!); + foreach (var action in serviceActivatedActions.GetActions(serviceDescriptor)) + { + action.Invoke(serviceActivatedContext); + } + }); + + return registrationBuilder; + } + private static IRegistrationBuilder InvokeRegistrationActions( this IRegistrationBuilder registrationBuilder, ServiceRegistrationActionList registrationActionList, diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs index afc528bb90..9e86a0e3ce 100644 --- a/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs +++ b/framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs @@ -189,8 +189,6 @@ public static class AutofacRegistration { if (descriptor.ImplementationType != null) { - var activatedActions = activatedActionList.GetActions(descriptor); - // Test if the an open generic type is being registered var serviceTypeInfo = descriptor.ServiceType.GetTypeInfo(); if (serviceTypeInfo.IsGenericTypeDefinition) @@ -199,7 +197,7 @@ public static class AutofacRegistration .RegisterGeneric(descriptor.ImplementationType) .As(descriptor.ServiceType) .ConfigureLifecycle(descriptor.Lifetime, lifetimeScopeTagForSingletons) - .ConfigureAbpConventions(moduleContainer, registrationActionList, activatedActions); + .ConfigureAbpConventions(descriptor, moduleContainer, registrationActionList, activatedActionList); } else { @@ -207,7 +205,7 @@ public static class AutofacRegistration .RegisterType(descriptor.ImplementationType) .As(descriptor.ServiceType) .ConfigureLifecycle(descriptor.Lifetime, lifetimeScopeTagForSingletons) - .ConfigureAbpConventions(moduleContainer, registrationActionList, activatedActions); + .ConfigureAbpConventions(descriptor, moduleContainer, registrationActionList, activatedActionList); } } else if (descriptor.ImplementationFactory != null)