Ejemplo n.º 1
0
        protected AggregateSaga()
        {
            _serviceProvider = Context.System.GetExtension <ServiceProviderHolder>().ServiceProvider;

            Settings = new AggregateSagaSettings(Context.System.Settings.Config);
            var idValue = Context.Self.Path.Name;

            PersistenceId = idValue;
            Id            = (TIdentity)Activator.CreateInstance(typeof(TIdentity), idValue);

            if (Id == null)
            {
                throw new InvalidOperationException(
                          $"Identity for Saga '{Id?.GetType().PrettyPrint()}' could not be activated.");
            }

            if ((this as TAggregateSaga) == null)
            {
                throw new InvalidOperationException(
                          $"AggregateSaga {Name} specifies Type={typeof(TAggregateSaga).PrettyPrint()} as generic argument, it should be its own type.");
            }

            if (State == null)
            {
                try
                {
                    State = (TSagaState)Activator.CreateInstance(typeof(TSagaState));
                }
                catch (Exception exception)
                {
                    Context.GetLogger().Error(exception, "AggregateSaga of Name={1}; was unable to activate SagaState of Type={0}.", Name, typeof(TSagaState).PrettyPrint());
                }
            }

            if (Settings.AutoReceive)
            {
                InitAsyncReceives();
            }


            if (Settings.UseDefaultEventRecover)
            {
                Recover <ICommittedEvent <TIdentity, IAggregateEvent <TIdentity> > >(Recover);
                Recover <RecoveryCompleted>(Recover);
            }


            if (Settings.UseDefaultSnapshotRecover)
            {
                Recover <SnapshotOffer>(Recover);
            }


            Command <SaveSnapshotSuccess>(SnapshotStatus);
            Command <SaveSnapshotFailure>(SnapshotStatus);

            var appDefe = _serviceProvider.GetRequiredService <IApplicationDefinition>();

            _eventDefinitionService    = appDefe.Events;
            _snapshotDefinitionService = appDefe.Snapshots;
        }
Ejemplo n.º 2
0
 public void LoadEvents(IEventDefinitions eventDefinitions)
 {
     eventDefinitions.LoadInto(this);
 }
Ejemplo n.º 3
0
 public AggregateEventTagger(IEventDefinitions eventDefinitions)
 {
     _eventDefinitions = eventDefinitions;
 }