diff --git a/src/Elasticsearch.Net/Utf8Json/Resolvers/CompositeResolver.cs b/src/Elasticsearch.Net/Utf8Json/Resolvers/CompositeResolver.cs index 75f24001f8c..d4390e6b161 100644 --- a/src/Elasticsearch.Net/Utf8Json/Resolvers/CompositeResolver.cs +++ b/src/Elasticsearch.Net/Utf8Json/Resolvers/CompositeResolver.cs @@ -23,12 +23,20 @@ #endregion using System; +using System.Linq; using System.Reflection; using System.Reflection.Emit; using Elasticsearch.Net.Utf8Json.Internal.Emit; namespace Elasticsearch.Net.Utf8Json.Resolvers { + internal static class ResolverConfig + { + // this needs to be determined `dynamically` at compile time + // because we rewrite namespaces and published versioned packages + public static readonly string Namespace = String.Join(".", typeof(ResolverConfig).Namespace.Split('.').Take(2)); + } + internal sealed class CompositeResolver : IJsonFormatterResolver { public static readonly CompositeResolver Instance = new CompositeResolver(); @@ -147,7 +155,7 @@ static FormatterCache() internal abstract class DynamicCompositeResolver : IJsonFormatterResolver { - const string ModuleName = "Elasticsearch.Net.DynamicCompositeResolver"; + private static readonly string ModuleName = $"{ResolverConfig.Namespace}.DynamicCompositeResolver"; static readonly DynamicAssembly assembly; diff --git a/src/Elasticsearch.Net/Utf8Json/Resolvers/DynamicObjectResolver.cs b/src/Elasticsearch.Net/Utf8Json/Resolvers/DynamicObjectResolver.cs index 28dd08ca413..e9772ff61e0 100644 --- a/src/Elasticsearch.Net/Utf8Json/Resolvers/DynamicObjectResolver.cs +++ b/src/Elasticsearch.Net/Utf8Json/Resolvers/DynamicObjectResolver.cs @@ -85,7 +85,7 @@ internal sealed class CustomDynamicObjectResolver private readonly ThreadsafeTypeKeyHashTable _formatters = new ThreadsafeTypeKeyHashTable(); // configuration - const string ModuleName = "Elasticsearch.Net.CustomDynamicObjectResolver"; + private static readonly string ModuleName = $"{ResolverConfig.Namespace}.CustomDynamicObjectResolver"; static readonly DynamicAssembly assembly; @@ -133,7 +133,7 @@ internal sealed class DynamicObjectResolverAllowPrivateFalseExcludeNullFalseName public static readonly IJsonFormatterResolver Instance = new DynamicObjectResolverAllowPrivateFalseExcludeNullFalseNameMutateOriginal(); static readonly Func nameMutator = StringMutator.Original; static readonly bool excludeNull = false; - const string ModuleName = "Elasticsearch.Net.DynamicObjectResolverAllowPrivateFalseExcludeNullFalseNameMutateOriginal"; + private static readonly string ModuleName = $"{ResolverConfig.Namespace}.DynamicObjectResolverAllowPrivateFalseExcludeNullFalseNameMutateOriginal"; static readonly DynamicAssembly assembly; @@ -178,7 +178,7 @@ internal sealed class DynamicObjectResolverAllowPrivateFalseExcludeNullFalseName public static readonly IJsonFormatterResolver Instance = new DynamicObjectResolverAllowPrivateFalseExcludeNullFalseNameMutateCamelCase(); static readonly Func nameMutator = StringMutator.ToCamelCase; static readonly bool excludeNull = false; - const string ModuleName = "Elasticsearch.Net.DynamicObjectResolverAllowPrivateFalseExcludeNullFalseNameMutateCamelCase"; + private static readonly string ModuleName = $"{ResolverConfig.Namespace}.DynamicObjectResolverAllowPrivateFalseExcludeNullFalseNameMutateCamelCase"; static readonly DynamicAssembly assembly; @@ -223,7 +223,7 @@ internal sealed class DynamicObjectResolverAllowPrivateFalseExcludeNullFalseName public static readonly IJsonFormatterResolver Instance = new DynamicObjectResolverAllowPrivateFalseExcludeNullFalseNameMutateSnakeCase(); static readonly Func nameMutator = StringMutator.ToSnakeCase; static readonly bool excludeNull = false; - const string ModuleName = "Elasticsearch.Net.DynamicObjectResolverAllowPrivateFalseExcludeNullFalseNameMutateSnakeCase"; + private static readonly string ModuleName = $"{ResolverConfig.Namespace}.DynamicObjectResolverAllowPrivateFalseExcludeNullFalseNameMutateSnakeCase"; static readonly DynamicAssembly assembly; @@ -268,7 +268,7 @@ internal sealed class DynamicObjectResolverAllowPrivateFalseExcludeNullTrueNameM public static readonly IJsonFormatterResolver Instance = new DynamicObjectResolverAllowPrivateFalseExcludeNullTrueNameMutateOriginal(); static readonly Func nameMutator = StringMutator.Original; static readonly bool excludeNull = true; - const string ModuleName = "Elasticsearch.Net.DynamicObjectResolverAllowPrivateFalseExcludeNullTrueNameMutateOriginal"; + private static readonly string ModuleName = $"{ResolverConfig.Namespace}.DynamicObjectResolverAllowPrivateFalseExcludeNullTrueNameMutateOriginal"; static readonly DynamicAssembly assembly; @@ -313,7 +313,7 @@ internal sealed class DynamicObjectResolverAllowPrivateFalseExcludeNullTrueNameM public static readonly IJsonFormatterResolver Instance = new DynamicObjectResolverAllowPrivateFalseExcludeNullTrueNameMutateCamelCase(); static readonly Func nameMutator = StringMutator.ToCamelCase; static readonly bool excludeNull = true; - const string ModuleName = "Elasticsearch.Net.DynamicObjectResolverAllowPrivateFalseExcludeNullTrueNameMutateCamelCase"; + private static readonly string ModuleName = $"{ResolverConfig.Namespace}.DynamicObjectResolverAllowPrivateFalseExcludeNullTrueNameMutateCamelCase"; static readonly DynamicAssembly assembly; @@ -358,7 +358,7 @@ internal sealed class DynamicObjectResolverAllowPrivateFalseExcludeNullTrueNameM public static readonly IJsonFormatterResolver Instance = new DynamicObjectResolverAllowPrivateFalseExcludeNullTrueNameMutateSnakeCase(); static readonly Func nameMutator = StringMutator.ToSnakeCase; static readonly bool excludeNull = true; - const string ModuleName = "Elasticsearch.Net.DynamicObjectResolverAllowPrivateFalseExcludeNullTrueNameMutateSnakeCase"; + private static readonly string ModuleName = $"{ResolverConfig.Namespace}.DynamicObjectResolverAllowPrivateFalseExcludeNullTrueNameMutateSnakeCase"; static readonly DynamicAssembly assembly; @@ -653,7 +653,7 @@ static TypeInfo BuildType(DynamicAssembly assembly, Type type, Func x.ShouldSerializeMethodInfo != null); var formatterType = typeof(IJsonFormatter<>).MakeGenericType(type); - var typeBuilder = assembly.DefineType("Elasticsearch.Net." + SubtractFullNameRegex.Replace(type.FullName, "").Replace(".", "_") + "Formatter" + Interlocked.Increment(ref nameSequence), TypeAttributes.NotPublic | TypeAttributes.Sealed, null, new[] { formatterType }); + var typeBuilder = assembly.DefineType(ResolverConfig.Namespace + "." + SubtractFullNameRegex.Replace(type.FullName, "").Replace(".", "_") + "Formatter" + Interlocked.Increment(ref nameSequence), TypeAttributes.NotPublic | TypeAttributes.Sealed, null, new[] { formatterType }); FieldBuilder stringByteKeysField; Dictionary customFormatterLookup;