EventBus 未使用 Abp 在 ASP.NET Core 上触发事件
EventBus is not triggering event on ASP.NET Core using Abp
我正尝试按照描述使用 EventBus here。
这是我的事件数据class
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);
}
}
根据教程的解释,如果我们的 class 实现:IEventHandler、ITransientDependency,它将被注册。但出于某种原因,我现在无法弄清楚事件没有被触发。
我对我的代码进行了一些更新,现在可以正常工作了。
- 删除了 DasServiceBase
public class EntryEventManager : IEntryEventManager
{
public void HandleEvent(UpdateEntryEventData eventData)
{
// Some logic when an entry is updated ...
}
}
- DasDomainServiceBase 替换为 DasServiceBase
- 属性 EventBus 必须是 public
public class EntryManager : DasServiceBase, IEntryManager
{
public IEventBus EventBus { get; set; }
}
我正尝试按照描述使用 EventBus here。
这是我的事件数据class
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);
}
}
根据教程的解释,如果我们的 class 实现:IEventHandler、ITransientDependency,它将被注册。但出于某种原因,我现在无法弄清楚事件没有被触发。
我对我的代码进行了一些更新,现在可以正常工作了。
- 删除了 DasServiceBase
public class EntryEventManager : IEntryEventManager
{
public void HandleEvent(UpdateEntryEventData eventData)
{
// Some logic when an entry is updated ...
}
}
- DasDomainServiceBase 替换为 DasServiceBase
- 属性 EventBus 必须是 public
public class EntryManager : DasServiceBase, IEntryManager
{
public IEventBus EventBus { get; set; }
}