Skip to content

Commit 9bfc2ec

Browse files
alexeyzimarevclaude
andcommitted
fix: address PR review feedback for AOT serializer cleanup
- Add TrySetDefault to EventSerializer using Interlocked.CompareExchange so DefaultEventSerializer constructor doesn't overwrite an existing serializer configuration - Add module initializer to Eventuous.Tests.Subscriptions.Base so integration tests (Azure, Kafka, KurrentDB) have EventSerializer.Default configured before use Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 19ac3f8 commit 9bfc2ec

4 files changed

Lines changed: 22 additions & 1 deletion

File tree

src/Core/src/Eventuous.Serialization.Json/DefaultEventSerializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public DefaultEventSerializer(JsonSerializerOptions options, ITypeMapper? typeMa
1616
_typeMapper = typeMapper ?? TypeMap.Instance;
1717

1818
// Auto-register as default if none is set
19-
EventSerializer.SetDefault(this);
19+
EventSerializer.TrySetDefault(this);
2020
}
2121

2222
[UnconditionalSuppressMessage("Trimming", "IL2026", Justification = "This class is not intended for AOT use.")]

src/Core/src/Eventuous.Serialization/EventSerializer.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,14 @@ public static class EventSerializer {
2626
/// </summary>
2727
public static void SetDefault(IEventSerializer serializer)
2828
=> _default = serializer ?? throw new ArgumentNullException(nameof(serializer));
29+
30+
/// <summary>
31+
/// Sets the default event serializer only if one has not already been configured.
32+
/// Returns true if the default was set, false if it was already configured.
33+
/// </summary>
34+
public static bool TrySetDefault(IEventSerializer serializer) {
35+
ArgumentNullException.ThrowIfNull(serializer);
36+
37+
return Interlocked.CompareExchange(ref _default, serializer, null) == null;
38+
}
2939
}

src/Core/test/Eventuous.Tests.Subscriptions.Base/Eventuous.Tests.Subscriptions.Base.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
</PropertyGroup>
77
<ItemGroup>
88
<ProjectReference Include="$(LocalRoot)\Eventuous.Subscriptions\Eventuous.Subscriptions.csproj" />
9+
<ProjectReference Include="$(CoreRoot)\Eventuous.Serialization.Json\Eventuous.Serialization.Json.csproj"/>
910
<ProjectReference Include="..\Eventuous.Tests.Persistence.Base\Eventuous.Tests.Persistence.Base.csproj"/>
1011
<ProjectReference Include="$(ExtRoot)\Eventuous.Extensions.DependencyInjection\Eventuous.Extensions.DependencyInjection.csproj"/>
1112
</ItemGroup>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using System.Runtime.CompilerServices;
2+
using System.Text.Json;
3+
4+
namespace Eventuous.Tests.Subscriptions.Base;
5+
6+
static class TestSetup {
7+
[ModuleInitializer]
8+
internal static void Initialize()
9+
=> new DefaultEventSerializer(new JsonSerializerOptions(JsonSerializerDefaults.Web));
10+
}

0 commit comments

Comments
 (0)