Как работает локатор ViewModel в модульной системе - PullRequest
1 голос
/ 08 июля 2011

Когда я делаю Приложения MVVM, у меня обычно есть центральный локатор ViewModel, который работает с шаблоном локатора сервиса. Это позволяет мне вводить ViewModel с сервисами через Ninject

Мой локатор ViewModel обычно выглядит так:

public class ViewModelLocator
{
    private static IKernel kernel;

    public ViewModelLocator()
    {
        if (kernel == null)
        {
            kernel = new StandardKernel(new ConfigModule());
        }
    }

    public static T Get<T>()
    {
        return kernel.Get<T>();
    }


    public static ProductViewModel ProductViewModel{

        get { return kernel.Get<ProductViewModel>(); }

    }

    public UserViewModel UserViewModel {
        get { return kernel.Get<UserViewModel>();}
    }
}

public class ConfigModule : NinjectModule
{
    public override void Load()
    {

        Bind<ProductViewModel>().ToSelf();
        Bind<UserViewModel>().ToSelf();

    }
}

Сейчас я думаю о добавлении еще одного модуля, который называется "Заказы". Так что у меня будет OrderViewModel (или в реальной жизни пару из них). И я хочу, чтобы они были отделены и импортированы через MEF.

Как можно расширить / изменить этот подход, чтобы иметь возможность работать с центрическим локатором видовой модели и импортированными моделями и представлениями.

Да, я знаю Призму и Калибурн, но мне было бы интересно увидеть подход ...

Спасибо за любую помощь ....

1 Ответ

0 голосов
/ 23 сентября 2011

Взгляните на сэмплы MVVM Light (в частности, ViewModelLocator ), чтобы увидеть отличный образец паттерна в действии.

Примечание: вам не нужно использовать инфраструктуру MVVM Light для применения этого шаблона - что вы на самом деле смотрите на его архитектуру. Каркас просто делает это проще! FWIW, я рекомендую вам использовать рамки ...:)

...