diff --git a/src/YaNco.Core/TypeMapping/CachingConverterResolver.cs b/src/YaNco.Core/TypeMapping/CachingConverterResolver.cs index b5ea0da9..35be854f 100644 --- a/src/YaNco.Core/TypeMapping/CachingConverterResolver.cs +++ b/src/YaNco.Core/TypeMapping/CachingConverterResolver.cs @@ -20,20 +20,25 @@ public CachingConverterResolver(IRfcConverterResolver decoratedResolver) public IEnumerable> GetToRfcConverters(RfcType rfcType) { var sourceType = typeof(T); - var key = $"{rfcType}_{sourceType}"; + var key = $"{rfcType}_{sourceType.AssemblyQualifiedName}"; - if (!_toRfcConverters.ContainsKey(key)) + if (!_toRfcConverters.TryGetValue(key, out var entry)) { var converters = _decoratedResolver.GetToRfcConverters(rfcType).ToArray(); - _toRfcConverters.Add(key, converters.Length == 0 ? null : converters); - + entry = converters.Length == 0 ? null : converters; + try + { + _toRfcConverters.Add(key, entry); + } + catch (Exception) + { + // ignored + } } - var entry = _toRfcConverters[key]; - if (entry != null) return (IEnumerable>)entry; - return new IToAbapValueConverter[0]; + return Array.Empty>(); } @@ -41,19 +46,26 @@ public IEnumerable> GetToRfcConverters(RfcType rfcTy public IEnumerable> GetFromRfcConverters(RfcType rfcType, Type abapValueType) { var targetType = typeof(T); - var key = $"{rfcType}_{targetType}"; + var key = $"{rfcType}_{targetType.AssemblyQualifiedName}"; - if (!_fromRfcConverters.ContainsKey(key)) + if (!_fromRfcConverters.TryGetValue(key, out var entry)) { var converters = _decoratedResolver.GetFromRfcConverters(rfcType, abapValueType).ToArray(); - _fromRfcConverters.Add(key, converters.Length == 0 ? null : converters); + entry = converters.Length == 0 ? null : converters; + try + { + _fromRfcConverters.Add(key, entry); + } + catch (Exception) + { + // ignored + } } - var entry = _fromRfcConverters[key]; - if (entry != null) return (IEnumerable>)entry; - return new IFromAbapValueConverter[0]; + return Array.Empty>(); } + } } \ No newline at end of file