gpt4 book ai didi

nservicebus - NServiceBus 中的多态订阅仅适用于接口(interface)?

转载 作者:行者123 更新时间:2023-12-04 06:44:50 25 4
gpt4 key购买 nike

遵循此解释的最简单方法是 NServiceBus Pub/Sub 示例,其中包含“多态订阅”示例 (Subscriber2)。

消息:(未更改)

public class EventMessage : IEvent
{
public Guid EventId { get; set; }
public DateTime? Time { get; set; }
public TimeSpan Duration { get; set; }
}

public interface IEvent : IMessage
{
Guid EventId { get; set; }
DateTime? Time { get; set; }
TimeSpan Duration { get; set; }
}

处理程序:(无变化)

public class EventMessageHandler : IHandleMessages<IEvent>
{
public void Handle(IEvent message)
{
// ...
}
}

此处理程序将接收 IEventEventMessage 消息。但是如果我将 IEvent 设为一个类...

public class IEvent : IMessage
{
Guid EventId { get; set; }
DateTime? Time { get; set; }
TimeSpan Duration { get; set; }
}

...那么我将无法接收 EventMessage 但会像以前一样接收IEvent

所以我发现了这样一个简单的规则:如果你在 IHandleMessages<> 中使用接口(interface) - 它会起作用,如果是类 - 它不会起作用。目前我将所有消息作为类,我想订阅父类消息以接收所有子类消息。

这是有意的行为吗?

最佳答案

这一切都是为了实现多重继承而设计的。这样做的原因详解here .建议将业务组件之间的公共(public)可用事件建模为接口(interface),建议将业务组件内的命令建模为类。听起来你想要这种行为,我会切换到接口(interface)。

关于nservicebus - NServiceBus 中的多态订阅仅适用于接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3865068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com