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)); } }