Как работает локатор 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, я рекомендую вам использовать рамки...:)