public async Task <Result> TriggerActionAsync(object id, string action, string triggeredBy, CancellationToken cancellationToken) { var actionEvents = new ActionEvents(); using (var unitOfWork = UnitOfWorkFactory.Create()) { var entity = await unitOfWork.ReadOnlyRepository <TContext, TEntity>().GetByIdAsync(cancellationToken, id); if (entity is IEntityAggregateRoot) { IDomainActionEvent actionEvent = actionEvents.CreateEntityActionEvent(action, null, entity, triggeredBy); if (actionEvent != null) { ((IEntityAggregateRoot)entity).AddActionEvent(actionEvent); var validationResult = unitOfWork.Repository <TContext, TEntity>().Update(entity, triggeredBy); if (validationResult.IsFailure) { return(Result.ObjectValidationFail <TEntity>(validationResult.ObjectValidationErrors)); } return(await unitOfWork.CompleteAsync(cancellationToken).ConfigureAwait(false)); } } } return(Result.Ok()); }
public Result TriggerAction(object id, string action, string triggeredBy) { var actionEvents = new ActionEvents(); using (var unitOfWork = UnitOfWorkFactory.Create()) { var entity = unitOfWork.ReadOnlyRepository <TContext, TEntity>().GetById(id); if (entity is IEntityAggregateRoot) { IDomainActionEvent actionEvent = actionEvents.CreateEntityActionEvent(action, null, entity, triggeredBy); if (actionEvent != null) { ((IEntityAggregateRoot)entity).AddActionEvent(actionEvent); var validationResult = unitOfWork.Repository <TContext, TEntity>().Update(entity, triggeredBy); if (validationResult.IsFailure) { return(Result.ObjectValidationFail <TEntity>(validationResult.ObjectValidationErrors)); } return(unitOfWork.Complete()); } } } return(Result.Ok()); }
public IDomainActionEvent CreateEntityActionEvent(string action, dynamic args, object entity, string triggeredBy) { IDomainActionEvent actionEvent = null; if (entity is IEntity) { Type genericType = typeof(EntityActionEvent <>); Type[] typeArgs = { entity.GetType() }; Type constructed = genericType.MakeGenericType(typeArgs); actionEvent = (IDomainActionEvent)Activator.CreateInstance(constructed, action, args, entity, triggeredBy); } return(actionEvent); }
public Dictionary <string, List <string> > GetActions(Type entityType) { Dictionary <string, List <string> > actions = new Dictionary <string, List <string> >(); IDomainActionEvent actionEvent = null; if (typeof(IEntity).IsAssignableFrom(entityType)) { Type genericType = typeof(EntityActionEvent <>); Type[] typeArgs = { entityType }; Type constructed = genericType.MakeGenericType(typeArgs); actionEvent = (IDomainActionEvent)Activator.CreateInstance(constructed, null, null, null, null); } if (actionEvent != null) { var eventHandlerInterfaceType = typeof(IDomainEventHandler <>).MakeGenericType(actionEvent.GetType()); var types = typeof(IEnumerable <>).MakeGenericType(eventHandlerInterfaceType); dynamic handlers = HttpContext.GetInstance(types); foreach (var handler in handlers) { IDictionary <string, string> handleActions = (IDictionary <string, string>)handler.HandleActions; foreach (var handleAction in handleActions) { if (!actions.ContainsKey(handleAction.Key)) { actions.Add(handleAction.Key, new List <string>()); } if (!actions[handleAction.Key].Contains(handleAction.Value)) { actions[handleAction.Key].Add(handleAction.Value); } } } } return(actions); }
public void AddActionEvent(IDomainActionEvent actionEvent) { _domainEvents.Add(actionEvent); }