Exemplo n.º 1
0
        /// <summary>
        /// Creates the specified state machine configurator.
        /// </summary>
        /// <typeparam name="TEntity">The type of the entity.</typeparam>
        /// <typeparam name="TId">The type of the id.</typeparam>
        /// <param name="fsmConfigurator">The FSM configurator.</param>
        /// <param name="entity">The entity.</param>
        /// <param name="startState">The start state.</param>
        /// <returns></returns>
        public static FsmDecorator <TEntity, TId> Create <TEntity, TId>(FsmConfigurator fsmConfigurator, TEntity entity, string startState)
            where TEntity : IVersionableEntity <TId>
        {
            var finiteStateMachine = new FiniteStateMachine <IDomainEvent <TEntity> >();
            var fsmDecorator       = new FsmDecorator <TEntity, TId>(finiteStateMachine, entity);

            fsmDecorator.AddStates(fsmConfigurator.States);
            fsmDecorator.StartState = string.IsNullOrEmpty(startState) ? fsmConfigurator.StartState : startState;
            fsmDecorator.AddTransitions(fsmConfigurator.Transitions);
            fsmDecorator.SetFinalStates(fsmConfigurator.FinalStates);

            return(fsmDecorator);
        }
Exemplo n.º 2
0
        public void Setup()
        {
            _repository       = new Repository <EntityEventSource <Ship, ObjectId>, ObjectId>("RationalEvs", "EventSourcing");
            _queryBuilder     = new MongoQuerySnapshotBuilder <Ship, ObjectId>();
            _eventsRepository = new EventsRepository <Ship, ObjectId>(_repository, _queryBuilder, 0);

            _fsmConfigurator = FsmConfiguratorFactory.WithXgml("shipStateMachine.xgml").SetInitialState("In Navigation").WithDomainAssembly
                               <DepartureEvent>("RationalEvs.Test.DomainFake.Events").
                               Create();

            _aggregateFactory = new AggregateRootFactory <Ship, ObjectId>(_eventsRepository, _fsmConfigurator)
            {
                Logger = LogManager.GetLogger(GetType())
            };

            _ship = new Ship {
                Id = ObjectId.GenerateNewId()
            };
        }
Exemplo n.º 3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AggregateRootFactory&lt;TEntity&gt;"/> class.
 /// </summary>
 /// <param name="repository">The repository.</param>
 /// <param name="fsmConfigurator">The FSM configurator.</param>
 /// <param name="applierEvents">The applier events.</param>
 public AggregateRootFactory(IEventsRepository <TEntity, TId> repository, FsmConfigurator fsmConfigurator, IApplierEvents applierEvents)
 {
     _repository      = repository;
     _fsmConfigurator = fsmConfigurator;
     _applierEvents   = applierEvents;
 }
Exemplo n.º 4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AggregateRootFactory&lt;TEntity&gt;"/> class.
 /// </summary>
 /// <param name="repository">The repository.</param>
 /// <param name="fsmConfigurator">The FSM configurator.</param>
 public AggregateRootFactory(IEventsRepository <TEntity, TId> repository, FsmConfigurator fsmConfigurator)
 {
     _repository      = repository;
     _fsmConfigurator = fsmConfigurator;
     _applierEvents   = ApplierEventFactory.DefaultApplier();
 }