【问题标题】:Implementing generic event listerns in nopCommerce在 nopCommerce 中实现通用事件侦听器
【发布时间】:2021-06-10 03:33:00
【问题描述】:

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

在 nopCommerce 中,有以下事件:

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

可以通过实现IConsumer&lt;EntityInsertedEvent&lt;TEntity&gt;&gt;接口来使用。

IConsumer.cs

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

Entity Inserted/Updated/Deleted Event.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

【问题讨论】:

    标签: asp.net-core interface nopcommerce


    【解决方案1】:

    这里给你一个例子。它是 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-04
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      相关资源
      最近更新 更多