微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 nopCommerce 中实现通用事件监听

如何解决在 nopCommerce 中实现通用事件监听

我正在尝试实现一个系统范围的通用 CRUD 跟踪器,用于侦听 CRUD 操作

nopCommerce 中,有以下事件:

EntityInsertedEvent<TEntity>
EntityUpdatedEvent<TEntity>
EntityDeletedEvent<TEntity>

可以通过实现 IConsumer<EntityInsertedEvent<TEntity>> 接口来使用。

IConsumer.cs

public interface IConsumer<T>
{
    void HandleEvent(T eventMessage);
}

实体插入/更新/删除事件.cs

public class EntityInsertedEvent<T> where T : BaseEntity
{
    public EntityInsertedEvent(T entity);

    public T Entity { get; }
}

标准实现是:(仅使用 BaseEntity 触发)

public class EventConsumer :IConsumer<EntityInsertedEvent<BaseEntity>>

尝试:

// compiles but there is a type mismatch between `BaseEntity` and the "EntityEvents"
public class MyConsumer<TEntity> :IConsumer<EntityInsertedEvent<TEntity>> where TEntity: BaseEntity

// does not compile because `TEntity` was not defined
public class MyConsumer :IConsumer<EntityInsertedEvent<TEntity>> where TEntity: BaseEntity

我应该如何实现 MyConsumer

解决方法

这里有一个例子。它是 OrderItem 存储库更新事件的使用者。如果您只想通用事件侦听器,则无法动态注册它。中介者模式不是这样工作的,所以你必须在运行前给出你的类名。

public class OrderItemEventConsumer :
    IConsumer<EntityUpdatedEvent<OrderItem>>
{
    private readonly IOrderService _orderService;
    public OrderItemEventConsumer(IOrderService orderService)
    {
        _orderService = orderService;
    }

    #region Methods
    /// <summary>
    /// Handle order item updated event
    /// </summary>
    /// <param name="eventMessage">Event message</param>
    public void HandleEvent(EntityUpdatedEvent<OrderItem> eventMessage)
    {
        
    }
    #endregion
}

订单商品类型为BaseEntity。

public partial class OrderItem : BaseEntity

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。