关于在工作单元触发领域事件问题

关于在工作单元触发领域事件问题

情景:比如我在工作单元内需要触发某些事件。然后工作单元结束后又触发某些事件。比如:下完订单后,发送消息到rabbitMQ.

public class MyHandler : IEventHandler<MyEventData>
{
    private readonly IUnitOfWorkManager _unitOfWorkManager;

    public MyHandler(IUnitOfWorkManager unitOfWorkManager)
    {
        _unitOfWorkManager = unitOfWorkManager;
    }

    public void HandleEvent(MyEventData eventData)
    {
        if (_unitOfWorkManager.Current != null)
        {
            _unitOfWorkManager.Current.Completed += (sender, args) =>  Handle(eventData);
        }
        else
        {
            Handle(eventData);
        }
    }

    private void Handle(MyEventData eventData)
    {
        //TODO: Handle your event here...
    }
}

abp的issues回答链接:Provide a way of adding items to DomainEvents in AggregateRoot, which are triggered after UOW succeed

在AggregateRoot中触发DomainEvents逻辑思考。

namespace Abp.Domain.Entities
{
    public class AggregateRoot : AggregateRoot<int>, IAggregateRoot
    {

    }

    public class AggregateRoot<TPrimaryKey> : Entity<TPrimaryKey>, IAggregateRoot<TPrimaryKey>
    {
        [NotMapped]
        public virtual ICollection<IEventData> DomainEvents { get; }

        public AggregateRoot()
        {
            DomainEvents = new Collection<IEventData>();
        }
    }
}

如何发布领域事件:

DomainEvents.Add(new BlogUrlChangedEventData(this, oldUrl));

因为在AbpDbContext.SaveChanges()之后会触发所有领域事件。

所以我们只需要在聚合中,需要触发某些事件的时候发布领域事件即可。

比如我们在订单添加的时候,需要触发AddOrderEventData。

则:


//Order聚合根中
public class OrderAggregateRoot
{

    public void CreateOrder(object orderObj)
    {
        //...
        //...
        DomainEvents.Add(new AddOrderEventData(this));
    }
    public void Cancel()
    {
        //...
        //...
        DomainEvents.Add(new CancelOrderEventData(this));
    }
}
/***
那么当这个OrderAggregateRoot。进行持久化对象的时候则会触发所有的领域对象。
如果没有调用过这个方法。则不会发布领域事件。
***/

参考博文: 关于ABP聚合根类AggregateRoot的思考

转载于:https://www.cnblogs.com/mainxx/p/9341863.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值