diff --git a/Fluid/UnsafeMemberAccessStrategy.cs b/Fluid/UnsafeMemberAccessStrategy.cs index 61850838..5467b844 100644 --- a/Fluid/UnsafeMemberAccessStrategy.cs +++ b/Fluid/UnsafeMemberAccessStrategy.cs @@ -1,8 +1,12 @@ -namespace Fluid +using System.Collections.Concurrent; + +namespace Fluid { public sealed class UnsafeMemberAccessStrategy : DefaultMemberAccessStrategy { - public static readonly UnsafeMemberAccessStrategy Instance = new UnsafeMemberAccessStrategy(); + private readonly ConcurrentDictionary _handledTypes = new(); + + public static readonly UnsafeMemberAccessStrategy Instance = new(); public override IMemberAccessor GetAccessor(Type type, string name) { @@ -13,7 +17,11 @@ public override IMemberAccessor GetAccessor(Type type, string name) return accessor; } - this.Register(type); + if (!_handledTypes.ContainsKey(type)) + { + this.Register(type); + _handledTypes.TryAdd(type, null); + } return base.GetAccessor(type, name); }