Использование интерфейса и MVVM light Messenger для запросов данных - PullRequest
0 голосов
/ 07 сентября 2010

У меня есть плагин, которому нужен доступ к определенной информации, чтобы правильно заполнить его элементы GUI. Однако этот плагин не должен знать обо всех других плагинах, поэтому я хочу запросить эту информацию из приложения.

В подобных ситуациях я всегда создаю интерфейс для обмена данными, а затем передаю этот интерфейс плагинам, чтобы они могли запрашивать данные, когда это необходимо. Однако недавно я начал использовать легкий инструментарий MVVM , потому что он обладает некоторыми замечательными функциями, такими как RelayCommand и Messenger. В этом случае я полностью вижу использование Messenger - плагинам не нужен интерфейс, потому что они могут просто использовать Messenger.Default.Send<MyDataRequestMessage>(...). Пока они регистрируют обработчик получения, все хорошо ... или это так?

Какой метод вы бы предпочли и почему?

Ответы [ 2 ]

1 голос
/ 13 сентября 2010

Как сказал Алекс, MEF был создан именно для этой цели.Если вам нужно управлять подключаемыми модулями, вы, вероятно, в конечном итоге дублируете большую часть работы, которую MEF предоставляет вам, если вы не используете ее.

Нет причин, по которым вы не можете использовать обаMEF и MVVM Light.Ваша идея связи из вашего плагина с вашим приложением с помощью мессенджера MVVM light интригует, и я надеюсь, что это сработает для вас.Однако имейте в виду, что любой плагин может зарегистрироваться для получения этих же сообщений, и вы можете получить один плагин, получающий сообщения другого плагина.Это может не быть проблемой для вас, но если вы не контролируете, кто пишет эти расширения, у вас определенно есть дыра в безопасности.

Удачи!

1 голос
/ 07 сентября 2010

В случае с плагинами агрегатор, такой как мессенджер MVVM Light, вполне исправен;В качестве альтернативы вы можете взглянуть на MEF (теперь часть .Net 4), которая также включает автообнаружение и другие такие приятные функции, и вы можете использовать интерфейсы с этим.Таким образом, ответ зависит от обстоятельств :) Лично я бы предпочел Messenger за его простоту, разве что для очень крупного корпоративного проекта.

...