【发布时间】:2021-08-01 07:26:31
【问题描述】:
我正在尝试创建通用实现以使用MassTransit 发布消息。
BasePublisher
public abstract class BasePublisher
{
private readonly IPublishEndpoint publishEndpoint;
public BasePublisher(IPublishEndpoint publishEndpoint)
{
this.publishEndpoint = publishEndpoint;
}
public Task Publish(IntegrationBaseEvent message)
{
return publishEndpoint.Publish(message);
}
}
IntegrationBaseEvent
public class IntegrationBaseEvent
{
public IntegrationBaseEvent(Guid id, string name, DateTime createdDate)
{
Id = id;
Name = name;
CreationDate = createdDate;
}
public IntegrationBaseEvent()
{
Id = Guid.NewGuid();
CreationDate = DateTime.UtcNow;
}
public Guid Id { get; private set; }
public string Name { get; set; }
public DateTime CreationDate { get; private set; }
}
我已经使用抽象 IntegrationBaseEvent 创建了事件。
public class BusinessCreatedEvent : IntegrationBaseEvent
{
public Guid BusinessId { get; set; }
public string BusinessName { get; set; }
}
通过下面的界面,我正在尝试发布消息,但它根本没有被消费
public interface IPublisher
{
Task Publish(IntegrationBaseEvent message);
}
仅当我为继承的事件 BusinessCreatedEvent 创建单独的发布者时才会使用它,如下所示
public interface ISubscriptionPublisher
{
Task Publish(BusinessCreatedEvent message);
}
我不想创建不同的发布者,只想使用下面的抽象发布者。
public class BusinessCreatedEventHandler
{
private readonly IPublisher _publisher;
public BusinessCreatedEventHandler(IPublisher publisher)
{
_publisher = publisher;
}
public Task Handle(string id, string name)
{
var message = new BusinessCreatedEvent
{
BusinessId = id,
BusinessName = name
};
_publisher.Publish(message);
return Task.CompletedTask;
}
}
有什么想法让它通用吗?
【问题讨论】:
标签: masstransit