【问题标题】:NServiceBus Routing not working based on Assembly for generic typesNServiceBus 路由不适用于基于通用类型的程序集
【发布时间】:2020-02-05 13:22:37
【问题描述】:

我有一个场景,我正在发送一个通用命令,例如:AddRequest。

当我使用 Assembly 配置路由时,它不起作用(错误:未指定目标): routeSettings.RouteToEndpoint(assembly, "App2.Endpoint"); 但是,通过类型配置路由时,命令发送成功:

  var genericType = Type.GetType("SharedApp.AddRequest`1[[SharedApp,MyObject]],SharedApp");
   routeSettings.RouteToEndpoint(genericType, "App2.Endpoint");

通过程序集配置时是否有问题/遗漏?

【问题讨论】:

    标签: .net-core messaging nservicebus


    【解决方案1】:

    当 NServiceBus 扫描程序集时,它会查找消息类型,但它发现的只是一个开放的泛型类型 AddRequest<T>。当您发送消息时,您发送的是 AddRequest<MyObject> 的一个实例,它是一个封闭的泛型类型,与发现的那个。

    不幸的是,NServiceBus 路由系统不知道泛型类型,而是使用类型相等来确定路由。因此它不知道将AddRequest<MyObject>发送到哪里。

    NServiceBus 路由系统之所以这样设计,是因为它已经使用了一种基于程序集和命名空间的组路由注册机制。您可以为一组类型注册一个路由,前提是它们在相同的程序集和/或命名空间中定义。如果您引入了另一种分组机制,例如基于泛型类型或基于类型继承(即基类型的路由用于派生类型),我们最终会遇到一种情况,即一个类型可以有多个关联的路由,而没有明确的方法来选择一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 2014-01-09
      • 2020-06-04
      • 1970-01-01
      相关资源
      最近更新 更多