#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 на общедоступный исправило мою проблему.