Browse Source

Add `InvokeActivatedActions` method.

pull/18259/head
maliming 3 years ago
parent
commit
9496cfb86f
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 33
      framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs
  2. 6
      framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs

33
framework/src/Volo.Abp.Autofac/Autofac/Builder/AbpRegistrationBuilderExtensions.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using Autofac.Core; using Autofac.Core;
using Autofac.Extras.DynamicProxy; using Autofac.Extras.DynamicProxy;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Autofac; using Volo.Abp.Autofac;
using Volo.Abp.Castle.DynamicProxy; using Volo.Abp.Castle.DynamicProxy;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -14,26 +15,20 @@ public static class AbpRegistrationBuilderExtensions
{ {
public static IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> ConfigureAbpConventions<TLimit, TActivatorData, TRegistrationStyle>( public static IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> ConfigureAbpConventions<TLimit, TActivatorData, TRegistrationStyle>(
this IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> registrationBuilder, this IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> registrationBuilder,
ServiceDescriptor serviceDescriptor,
IModuleContainer moduleContainer, IModuleContainer moduleContainer,
ServiceRegistrationActionList registrationActionList, ServiceRegistrationActionList registrationActionList,
List<Action<IOnServiceActivatedContext>> serviceActivatedActions) ServiceActivatedActionList serviceActivatedActions)
where TActivatorData : ReflectionActivatorData where TActivatorData : ReflectionActivatorData
{ {
registrationBuilder = registrationBuilder.InvokeActivatedActions(serviceActivatedActions, serviceDescriptor);
var serviceType = registrationBuilder.RegistrationData.Services.OfType<IServiceWithType>().FirstOrDefault()?.ServiceType; var serviceType = registrationBuilder.RegistrationData.Services.OfType<IServiceWithType>().FirstOrDefault()?.ServiceType;
if (serviceType == null) if (serviceType == null)
{ {
return registrationBuilder; return registrationBuilder;
} }
registrationBuilder.OnActivated(context =>
{
var serviceActivatedContext = new OnServiceActivatedContext(context.Instance!);
foreach (var action in serviceActivatedActions)
{
action.Invoke(serviceActivatedContext);
}
});
var implementationType = registrationBuilder.ActivatorData.ImplementationType; var implementationType = registrationBuilder.ActivatorData.ImplementationType;
if (implementationType == null) if (implementationType == null)
{ {
@ -46,6 +41,24 @@ public static class AbpRegistrationBuilderExtensions
return registrationBuilder; return registrationBuilder;
} }
private static IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> InvokeActivatedActions<TLimit, TActivatorData, TRegistrationStyle>(
this IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> 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<TLimit, TActivatorData, TRegistrationStyle> InvokeRegistrationActions<TLimit, TActivatorData, TRegistrationStyle>( private static IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> InvokeRegistrationActions<TLimit, TActivatorData, TRegistrationStyle>(
this IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> registrationBuilder, this IRegistrationBuilder<TLimit, TActivatorData, TRegistrationStyle> registrationBuilder,
ServiceRegistrationActionList registrationActionList, ServiceRegistrationActionList registrationActionList,

6
framework/src/Volo.Abp.Autofac/Autofac/Extensions/DependencyInjection/AutofacRegistration.cs

@ -189,8 +189,6 @@ public static class AutofacRegistration
{ {
if (descriptor.ImplementationType != null) if (descriptor.ImplementationType != null)
{ {
var activatedActions = activatedActionList.GetActions(descriptor);
// Test if the an open generic type is being registered // Test if the an open generic type is being registered
var serviceTypeInfo = descriptor.ServiceType.GetTypeInfo(); var serviceTypeInfo = descriptor.ServiceType.GetTypeInfo();
if (serviceTypeInfo.IsGenericTypeDefinition) if (serviceTypeInfo.IsGenericTypeDefinition)
@ -199,7 +197,7 @@ public static class AutofacRegistration
.RegisterGeneric(descriptor.ImplementationType) .RegisterGeneric(descriptor.ImplementationType)
.As(descriptor.ServiceType) .As(descriptor.ServiceType)
.ConfigureLifecycle(descriptor.Lifetime, lifetimeScopeTagForSingletons) .ConfigureLifecycle(descriptor.Lifetime, lifetimeScopeTagForSingletons)
.ConfigureAbpConventions(moduleContainer, registrationActionList, activatedActions); .ConfigureAbpConventions(descriptor, moduleContainer, registrationActionList, activatedActionList);
} }
else else
{ {
@ -207,7 +205,7 @@ public static class AutofacRegistration
.RegisterType(descriptor.ImplementationType) .RegisterType(descriptor.ImplementationType)
.As(descriptor.ServiceType) .As(descriptor.ServiceType)
.ConfigureLifecycle(descriptor.Lifetime, lifetimeScopeTagForSingletons) .ConfigureLifecycle(descriptor.Lifetime, lifetimeScopeTagForSingletons)
.ConfigureAbpConventions(moduleContainer, registrationActionList, activatedActions); .ConfigureAbpConventions(descriptor, moduleContainer, registrationActionList, activatedActionList);
} }
} }
else if (descriptor.ImplementationFactory != null) else if (descriptor.ImplementationFactory != null)

Loading…
Cancel
Save