EventBus не запускает событие на ASP.NET Ядро, использующее Abp

#c# #asp.net-core #aspnetboilerplate #asp.net-boilerplate

#c# #asp.net-core #aspnetboilerplate #asp.net-шаблон

Вопрос:

Я пытаюсь использовать EventBus, как описано здесь .

Вот мой класс EventData

     public class UpdateEntryEventData: EventData
    {
        public long? AttributeId { get; set; }
        public int? TenantId { get; set; }
        public Guid Id { get; set; }
    }

  

Интерфейс

     public interface IEntryEventManager: IEventHandler<UpdateEntryEventData>, ITransientDependency
    {

    }
  

Реализация интерфейса

     public class EntryEventManager : DasServiceBase, IEntryEventManager
    {
        public void HandleEvent(UpdateEntryEventData eventData)
        {
            // Some logic when an entry is updated ...
        }
    }
  

Вот когда я вызываю метод для запуска события.

 public class EntryManager : DasDomainServiceBase, IEntryManager
{
   public IEventBus EventBus { get; set; }
   
   public EntryManager()
   {
     EventBus = NullEventBus.Instance;
   }

   public async Task<MessageOutput<Guid>> UpdateAsync(UpdateEntryInput input)
   {
      input.Entry = await _customDataManager.GetEntryAsync(input.Entry, AbpSession?.TenantId);

      var result = await _entryStore.UpdateAsync(input).ConfigureAwait(false);
                        
      EventBus.Trigger(new UpdateEntryEventData
      {
         TenantId = AbpSession.GetTenantId(),
         Id = input.Id,
         AttributeId = input.AttributeId
       });

       return new MessageOutput<Guid>(result, null);
    }   
}
  

Исходя из объяснения руководства, если наш класс реализует: IEventHandler, ITransientDependency, он будет зарегистрирован. Но по какой-то причине, которую я не могу понять сейчас, событие не запускается.

Комментарии:

1. Попробуйте сначала зарегистрировать свой класс в ConfigureServices .

2. Спасибо @Dusan, но я понял, что происходит. Теперь он работает.

Ответ №1:

Я внес некоторые обновления в свой код, и теперь он работает.

  • Удалена база DasServiceBase
     public class EntryEventManager : IEntryEventManager
    {
        public void HandleEvent(UpdateEntryEventData eventData)
        {
            // Some logic when an entry is updated ...
        }
    }
  
  • DasDomainServiceBase заменен на DasServiceBase
  • Свойство EventBus должно быть общедоступным
 public class EntryManager : DasServiceBase, IEntryManager
{
   public IEventBus EventBus { get; set; }
}
  

Комментарии:

1. изменение EventBus на общедоступный исправило мою проблему.