NServiceBus Маршрутизация не работает на основе ассемблера для обобщенных типов c - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть сценарий, в котором я отправляю обобщенную c команду типа: AddRequest.

Когда я настраиваю маршрутизацию с использованием Assembly, она не работает (ошибка: пункт назначения не указан): routeSettings.RouteToEndpoint(assembly, "App2.Endpoint"); Однако команда успешно отправляется при настройке маршрутизации по типу:

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

Что-то не так / отсутствует при настройке через сборку?

1 Ответ

1 голос
/ 27 февраля 2020

Когда NServiceBus сканирует сборку, ищет типы сообщений, но находит только открытый шаблон c тип AddRequest<T>. Когда вы отправляете сообщение, вы отправляете экземпляр AddRequest<MyObject>, который является закрытым шаблоном c type, очень отличается от обнаруженного.

К сожалению, система маршрутизации NServiceBus не знает о обобщенных c типах и использует равенство типов для определения маршрута. Из-за этого он не знает, куда отправлять AddRequest<MyObject>.

. Причина, по которой система маршрутизации NServiceBus была разработана таким образом, заключается в том, что она уже использует один механизм для групповой регистрации маршрутов, который основан на сборке и пространстве имен. Вы можете зарегистрировать один маршрут для набора типов при условии, что они определены в одной сборке и / или пространстве имен. Если бы вы ввели еще один механизм группировки, например, основанный на обобщенных типах c или на основе наследования типов (т. Е. Маршрут для базового типа используется для производных типов), мы бы оказались в ситуации, когда у типа может быть несколько маршрутов, связанных с отсутствием ясный способ выбрать одно над другими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...