Как я могу объединить MVVM и Внедрение зависимости в приложении WPF?

/abc\[^d][^e][^f][^g]

Это является довольно громоздким для больших слов, но работает как очарование.

12
задан Max Galkin 26 November 2009 в 09:44
поделиться

3 ответа

Если модель представления может существовать только в сочетании с другой, я создаю сильную связь. То есть модель представления-владельца будет иметь прямую ссылку на одну или несколько моделей зависимых представлений. Если, с другой стороны, модель представления должна иметь возможность существовать с другим или без него, я использую слабосвязанный подход, при котором они общаются через шину событий.

С точки зрения использования DI с MVVM, абсолютно вы можете комбинировать два. Это так просто, как:

public class MyViewModel
{
    private readonly IMyDependency _myDependency;

    public MyViewModel(IMyDependency myDependency)
    {
        _myDependency = myDependency;
    }
}

Обратите внимание, однако, что это предполагает подход к MVVM «сначала модель представления», который имеет свои недостатки.

6
ответ дан 2 December 2019 в 22:22
поделиться

В WPF это обычно довольно просто и на самом деле не зависит от какого-либо конкретного контейнера DI. Вы читали статью Джоша Смита о MVVM ? Он в значительной степени описывает, как настроить иерархию ViewModels.

В нем мало что входит, так это то, как создавать эти ViewModels из зависимостей (таких как репозитории), но это несложная экстраполяция.

Я часто сталкивался с тем, что либеральное использование абстрактных фабрик очень помогает в этом отношении. Вместо того, чтобы напрямую создавать ViewModels, я позволил внедренной Factory сделать это за меня.

Вы можете использовать DI для бедняков или любой другой DI-контейнер для подключения таких фабрик для вас.

3
ответ дан 2 December 2019 в 22:22
поделиться

Я опубликовал эту статью в Code Project о том, как создать расширяемое приложение WPF с использованием MVVM и MEF для расширяемости. Однако, если вы присмотритесь, я также использовал MEF для DI.

Приложение полностью MVVM и использует только DataTemplates (и иногда Window) для представлений, как и в статье Джоша Смита. WPF позаботится о применении правильного представления к правильной модели представления для вас. Это мило.

Он использует MEF, чтобы части могли «находить» друг друга. Таким образом, ViewModel для пункта меню «View» находит все пункты меню, которые должны находиться в подменю, используя точки расширения, а ViewModel для каждого из них «находит» ViewModel, который они должны передать менеджеру компоновки, используя составные точки. Еще они «находят» сервис менеджера компоновки с использованием элементарного локатора сервисов (MEF). Пример меню «Просмотр» - это почти то же самое, о чем вы говорите с вложенными моделями просмотра. Круто то, что они даже не знают друг о друге до выполнения.

1
ответ дан 2 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: