Как работает локатор ViewModel в модульной системе

Когда я делаю Приложения 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.

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

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

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

1 ответ

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

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

Другие вопросы по тегам