From 8a2f8b329e8f10fad94d1a8739c0f19fcad2ae35 Mon Sep 17 00:00:00 2001 From: "louis.li" Date: Thu, 29 May 2025 14:28:35 +0800 Subject: [PATCH] feat: DeepCopy OnStateChanged --- src/Aevatar.Core/GAgentBase.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Aevatar.Core/GAgentBase.cs b/src/Aevatar.Core/GAgentBase.cs index 1205821e..538da9fb 100644 --- a/src/Aevatar.Core/GAgentBase.cs +++ b/src/Aevatar.Core/GAgentBase.cs @@ -54,6 +54,7 @@ public abstract partial class private IStateDispatcher? StateDispatcher { get; set; } protected AevatarOptions? AevatarOptions; + private DeepCopier? _copier; public async Task ActivateAsync() { await Task.Yield(); @@ -245,7 +246,8 @@ public Task GetStateAsync() } public sealed override async Task OnActivateAsync(CancellationToken cancellationToken) - { + { + _copier = ServiceProvider.GetRequiredService(); StateDispatcher = ServiceProvider.GetService(); AevatarOptions = ServiceProvider.GetRequiredService>().Value; try @@ -353,10 +355,11 @@ private async Task InternalOnStateChangedAsync() await HandleStateChangedAsync(); if (StateDispatcher != null) { + var snapshot = _copier!.Copy(State); await StateDispatcher.PublishSingleAsync(this.GetGrainId(), - new StateWrapper(this.GetGrainId(), State, Version)); + new StateWrapper(this.GetGrainId(), snapshot, Version)); await StateDispatcher.PublishAsync(this.GetGrainId(), - new StateWrapper(this.GetGrainId(), State, Version)); + new StateWrapper(this.GetGrainId(), snapshot, Version)); } }