diff --git a/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs b/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs index e834b3d00d..1c9f4b2dd8 100644 --- a/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs +++ b/framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs @@ -126,7 +126,8 @@ public static class AbpRegistrationBuilderExtensions } else { - if (serviceRegistrationActionList.IsClassInterceptorsDisabled) + if (serviceRegistrationActionList.IsClassInterceptorsDisabled || + serviceRegistrationActionList.DisabledClassInterceptorsSelectors.Any(selector => selector.Predicate(serviceType))) { return registrationBuilder; } diff --git a/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionRegistrationActionExtensions.cs b/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionRegistrationActionExtensions.cs index 286cc05210..68fda48ee8 100644 --- a/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionRegistrationActionExtensions.cs +++ b/framework/src/Volo.Abp.Core/Microsoft/Extensions/DependencyInjection/ServiceCollectionRegistrationActionExtensions.cs @@ -1,4 +1,5 @@ using System; +using Volo.Abp; using Volo.Abp.DependencyInjection; namespace Microsoft.Extensions.DependencyInjection; @@ -39,6 +40,11 @@ public static class ServiceCollectionRegistrationActionExtensions return GetOrCreateRegistrationActionList(services).IsClassInterceptorsDisabled; } + public static void DisableAbpClassInterceptors(this IServiceCollection services, NamedTypeSelector selector) + { + GetOrCreateRegistrationActionList(services).DisabledClassInterceptorsSelectors.Add(selector); + } + // OnExposing public static void OnExposing(this IServiceCollection services, Action exposeAction) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ClassInterceptorsSelectorList.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ClassInterceptorsSelectorList.cs new file mode 100644 index 0000000000..11abc597c6 --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ClassInterceptorsSelectorList.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace Volo.Abp.DependencyInjection; + +public class ClassInterceptorsSelectorList : List, IClassInterceptorsSelectorList +{ + +} diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IClassInterceptorsSelectorList.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IClassInterceptorsSelectorList.cs new file mode 100644 index 0000000000..77991d813e --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IClassInterceptorsSelectorList.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace Volo.Abp.DependencyInjection; + +public interface IClassInterceptorsSelectorList : IList +{ + +} diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ServiceRegistrationActionList.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ServiceRegistrationActionList.cs index 8d4ce1b521..750a4c523e 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ServiceRegistrationActionList.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/ServiceRegistrationActionList.cs @@ -6,4 +6,11 @@ namespace Volo.Abp.DependencyInjection; public class ServiceRegistrationActionList : List> { public bool IsClassInterceptorsDisabled { get; set; } + + public IClassInterceptorsSelectorList DisabledClassInterceptorsSelectors { get; } + + public ServiceRegistrationActionList() + { + DisabledClassInterceptorsSelectors = new ClassInterceptorsSelectorList(); + } }