From bc1bc51b557cf4712c7133297e451a9174ebc936 Mon Sep 17 00:00:00 2001 From: Oleksandr HULYI Date: Fri, 14 Jul 2023 16:53:30 +1200 Subject: [PATCH] addressing #220 and #221 --- nuget/AspectInjector.Package.csproj | 4 ++-- .../Weavers/Processes/AdviceBeforeProcess.cs | 5 +++-- src/AspectInjector.Core/Extensions/FluentExtensions.cs | 10 +++++++++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/nuget/AspectInjector.Package.csproj b/nuget/AspectInjector.Package.csproj index f23f9677..f107a628 100644 --- a/nuget/AspectInjector.Package.csproj +++ b/nuget/AspectInjector.Package.csproj @@ -1,4 +1,4 @@ - + netstandard2.0 AspectInjector @@ -100,7 +100,7 @@ - + diff --git a/src/AspectInjector.Core.Advice/Weavers/Processes/AdviceBeforeProcess.cs b/src/AspectInjector.Core.Advice/Weavers/Processes/AdviceBeforeProcess.cs index fc875da6..90837a97 100644 --- a/src/AspectInjector.Core.Advice/Weavers/Processes/AdviceBeforeProcess.cs +++ b/src/AspectInjector.Core.Advice/Weavers/Processes/AdviceBeforeProcess.cs @@ -1,4 +1,4 @@ -using AspectInjector.Core.Advice.Effects; +using AspectInjector.Core.Advice.Effects; using AspectInjector.Core.Extensions; using AspectInjector.Core.Models; using FluentIL; @@ -16,6 +16,7 @@ public AdviceBeforeProcess(ILogger log, MethodDefinition target, InjectionDefini public override void Execute() { + _method.EnsureAspectInitialized(_aspect); _method.Body.OnAspectsInitialized( (in Cut e) => e .LoadAspect(_aspect) @@ -23,4 +24,4 @@ public override void Execute() ); } } -} \ No newline at end of file +} diff --git a/src/AspectInjector.Core/Extensions/FluentExtensions.cs b/src/AspectInjector.Core/Extensions/FluentExtensions.cs index 90971b62..186e3054 100644 --- a/src/AspectInjector.Core/Extensions/FluentExtensions.cs +++ b/src/AspectInjector.Core/Extensions/FluentExtensions.cs @@ -1,4 +1,4 @@ -using AspectInjector.Broker; +using AspectInjector.Broker; using AspectInjector.Core.Models; using FluentIL; using FluentIL.Extensions; @@ -77,6 +77,14 @@ public static Cut CreateAspectInstance(this in Cut cut, AspectDefinition aspect) call = call.Cast(call.TypeSystem.Object, aspect.Host); return call; + } + + public static void EnsureAspectInitialized(this MethodDefinition target, AspectDefinition aspect) + { + if (target.IsStatic || aspect.Scope == Scope.Global) + _ = GetGlobalAspectField(aspect); + else + _ = GetInstanceAspectField(aspect, target.DeclaringType, new Cut(target.Body, target.Body.Instructions[0])); } private static FieldReference GetInstanceAspectField(AspectDefinition aspect, TypeDefinition source, in Cut cut)