diff --git a/src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrain.cs b/src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrain.cs index d707d1d52..bca5cd380 100644 --- a/src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrain.cs +++ b/src/Squidex.Domain.Apps.Read/State/Grains/AppStateGrain.cs @@ -46,7 +46,10 @@ namespace Squidex.Domain.Apps.Read.State.Grains catch (Exception ex) { exception = ex; + } + if (state == null) + { state = new AppStateGrainState(); } diff --git a/src/Squidex.Domain.Apps.Read/State/Grains/AppUserGrain.cs b/src/Squidex.Domain.Apps.Read/State/Grains/AppUserGrain.cs index 86dda46d6..08be064e1 100644 --- a/src/Squidex.Domain.Apps.Read/State/Grains/AppUserGrain.cs +++ b/src/Squidex.Domain.Apps.Read/State/Grains/AppUserGrain.cs @@ -17,22 +17,15 @@ namespace Squidex.Domain.Apps.Read.State.Grains public sealed class AppUserGrain : IStatefulObject { private IPersistence persistence; - private AppUserGrainState state; + private AppUserGrainState state = new AppUserGrainState(); public Task ActivateAsync(string key, IStore store) { - persistence = store.WithSnapshots(key, ApplySnapShot); + persistence = store.WithSnapshots(key, s => state = s); return persistence.ReadAsync(); } - public Task ApplySnapShot(AppUserGrainState state) - { - this.state = state; - - return TaskHelper.Done; - } - public Task AddAppAsync(string appName) { state = state.AddApp(appName); diff --git a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs index 2f5bd0cca..a40f15a66 100644 --- a/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs +++ b/src/Squidex.Infrastructure/EventSourcing/Grains/EventConsumerGrain.cs @@ -24,7 +24,7 @@ namespace Squidex.Infrastructure.EventSourcing.Grains private IEventSubscription currentSubscription; private IEventConsumer eventConsumer; private IPersistence persistence; - private EventConsumerState state; + private EventConsumerState state = new EventConsumerState(); public EventConsumerGrain( IEventStore eventStore, diff --git a/src/Squidex.Infrastructure/States/Persistence.cs b/src/Squidex.Infrastructure/States/Persistence.cs index 28944a936..b4a517616 100644 --- a/src/Squidex.Infrastructure/States/Persistence.cs +++ b/src/Squidex.Infrastructure/States/Persistence.cs @@ -59,7 +59,7 @@ namespace Squidex.Infrastructure.States positionSnapshot = position; positionEvent = position; - if (applyState != null) + if (applyState != null && position >= 0) { await applyState(state); } diff --git a/src/Squidex/Config/Domain/InfrastructureServices.cs b/src/Squidex/Config/Domain/InfrastructureServices.cs index e7caf3529..5552c561a 100644 --- a/src/Squidex/Config/Domain/InfrastructureServices.cs +++ b/src/Squidex/Config/Domain/InfrastructureServices.cs @@ -19,6 +19,7 @@ using Squidex.Infrastructure.Assets.ImageSharp; using Squidex.Infrastructure.Commands; using Squidex.Infrastructure.EventSourcing; using Squidex.Infrastructure.Log; +using Squidex.Infrastructure.States; using Squidex.Infrastructure.UsageTracking; using Squidex.Pipeline; @@ -76,12 +77,6 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); - services.AddSingletonAs() - .As(); - - services.AddSingletonAs() - .As(); - services.AddSingletonAs() .As(); @@ -94,7 +89,8 @@ namespace Squidex.Config.Domain services.AddSingletonAs() .As(); - services.AddSingletonAs(); + services.AddSingletonAs() + .As(); } } }