NServiceBus:通过代码配置时未正确加载消息处理程序类型

NServiceBus:通过代码配置时未正确加载消息处理程序类型,nservicebus,Nservicebus,在PubSub示例中更改Subscriber2项目后,当此订阅者收到消息时,我收到以下错误: 错误 NServiceBus.Unicast.Transport.Msmq.MsmqTransport [(null)]-无法提取 消息数据。 System.TypeLoadException:无法执行 句柄类型“MyMessages.EventMessage” 我将EndpointConfig.cs文件更改为: using NServiceBus; namespace Subscriber2 {

在PubSub示例中更改Subscriber2项目后,当此订阅者收到消息时,我收到以下错误:

错误 NServiceBus.Unicast.Transport.Msmq.MsmqTransport [(null)]-无法提取 消息数据。 System.TypeLoadException:无法执行 句柄类型“MyMessages.EventMessage”

我将EndpointConfig.cs文件更改为:

using NServiceBus;

namespace Subscriber2
{
    public class EndpointConfig : IConfigureThisEndpoint, AsA_Server, IWantCustomInitialization
    {
        public void Init()
        {
            Configure.With(new[] { typeof(EventMessageHandler), typeof(NServiceBus.Unicast.Transport.CompletionMessage) })
                .DefaultBuilder()
                .XmlSerializer()
                .UnicastBus()
                .DoNotAutoSubscribe();
        }
    }
}

有人知道为什么这不起作用吗?

您没有在列表中指定消息类型。如果使用With()的重载,则必须提供所有类型。我建议改为指向特定的程序集,并让NSB扫描它以查找正确的类型。或者,您可以什么也不做,让它扫描bin目录。

看起来像是我列出了处理程序的类型,而不是消息。那么,我真正的问题是,有没有办法显式指定处理程序?我希望能够在运行时确定处理程序,我担心如果我有多个相同类型的处理程序,它会混淆。您必须向NSB使用的容器添加一个条件。为了实现这一点,您可以将容器的个人实例传递到NSB中以供使用。这样,您就可以完全控制加载的内容。