Основываясь на комментариях ОП, объекты создаются и уничтожаются сразу после.
Это заставляет код Publish("OtherModule");
ничего не делать, потому что слушатель был уничтожен.
Теперь действительно, если вы установите KeepSubscriberReferenceAlive
на true
,
будет работать, потому что ваш EventAggregator сохранитссылка на объект подписчика (InfrastructureModule
).
Это не идеально, в основном вы перешли от использования шаблона слабых событий, где вы не рискуете утечки памяти,
к необходимости обрабатывать время жизни объектов и, таким образом, рисковать утечки памяти, как обычное событие .NET.
Не поймите меня неправильно, я не говорю, что вам абсолютно не следует использовать KeepSubscriberReferenceAlive, но его следует использовать только в редких случаях.
При этом ваш тестовый пример нечетныйСценарий: Bootstrapper будет вызывать Initialize для каждого модуля, который вы определяете, и тогда ваша оболочка не будет содержать эти модули.Поскольку никто не держит эти Модули, они уничтожаются.
"Нормальное" использование для Initialize
- это внедрение модуля, который инициализируется, в Shell
(или любой другой UserControl), и этоимеет смысл: вы не хотите инициализировать то, что не будете использовать.