Skip to content

Commit

Permalink
[DEVEX-222] Made CLR type be resolved based on the message type metad…
Browse files Browse the repository at this point in the history
…ata header
  • Loading branch information
oskardudycz committed Jan 29, 2025
1 parent 6db199d commit e07b02a
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System.Diagnostics.CodeAnalysis;
using Kurrent.Client.Tests.Streams.Serialization;
using EventStore.Client.Diagnostics;

namespace EventStore.Client.Serialization;

Expand All @@ -19,7 +20,7 @@ public string ResolveTypeName(object messageData) {
return messageTypeMapper.GetOrAddTypeName(
messageData.GetType(),
clrType => clrType.FullName!
)!;
);
}

#if NET48
Expand All @@ -29,7 +30,17 @@ public bool TryResolveClrType(EventRecord messageRecord, [NotNullWhen(true)] out
#endif
type = messageTypeMapper.GetOrAddClrType(
messageRecord.EventType,
TypeProvider.GetFirstMatchingTypeFromCurrentDomainAssembly
_ => {
var serializationMetadata = messageRecord.Metadata.ExtractSerializationMetadata();

if (!serializationMetadata.IsValid)
return null;

return Type.GetType(
serializationMetadata.MessageTypeAssemblyQualifiedName
?? serializationMetadata.MessageTypeClrTypeName!
);
}
);

return type != null;
Expand Down
4 changes: 2 additions & 2 deletions src/Kurrent.Client/Core/Serialization/TypeProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ public static class TypeProvider

return AppDomain.CurrentDomain.GetAssemblies()
.Where(a => referencedAssemblies.Contains(a.FullName))
.SelectMany(a => a.GetTypes().Where(x => x.FullName == typeName || x.Name == typeName))
.SelectMany(a => a.GetTypes().Where(x => x.AssemblyQualifiedName == typeName || x.Name == typeName))
.FirstOrDefault();
}

public static Type? GetFirstMatchingTypeFromCurrentDomainAssembly(string typeName) =>
AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a => a.GetTypes().Where(x => x.FullName == typeName || x.Name == typeName))
.SelectMany(a => a.GetTypes().Where(x => x.AssemblyQualifiedName == typeName || x.Name == typeName))
.FirstOrDefault();
}

0 comments on commit e07b02a

Please sign in to comment.