В моем приложении (приложение WPF на основе MVVM-архитектуры) я использую много ICommand
с, как услуг. Некоторые из этих команд могут быть привязаны к пунктам меню, панелям инструментов, столбцам состояния и т. Д., Где они вводятся в соответствующие модели просмотра контейнеров. Теперь некоторые из них, например, могут манипулировать данными в оболочке приложения, поэтому Shell является их зависимостью. Поскольку Shell также содержит указанные контейнеры (меню, строка состояния ...), я получаю циклическую зависимость. (Shell -> Меню -> Command -> Shell).Круговые зависимости и инверсия управления - как их решить?
В настоящее время я использую MEF для составления моего приложения, поэтому большую часть времени проблема может быть решена с помощью использования частной или частной инъекции, но у меня такое ощущение, что это своего рода неприятная практика (услуга не имеет никакого способа говоря родителям, что ему нужна эта зависимость, даже если это так).
Мой вопрос: Что является распространенным способом решить проблему так:
class Shell : IShell
.ctor(IMenu)
class Menu : IMenu
.ctor(ICommand[])
class ExitCommand : ICommand
.ctor(IShell)
Два общих способа вызова команды из модели родительского представления ('Shell') или глобально доступные команды являются реализациями EventAggregator (' PubSubEvent' в 'Prism') или' CompositeCommand' (из 'Prism' снова). – mechanic
Что такое «Шелл»? Не могли бы вы описать это больше? – Joe
@Joe Оболочка - это в основном модель представления, которая выступает в качестве контейнера для всех других компонентов вида. – artganify