当我做MVVM应用程序时,我通常有一个中心ViewModel定位器,它与服务定位器模式一起工作。这允许我通过Ninject注入带有服务的ViewModel
我的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();
}
}
现在我正在考虑添加另一个名为“Orders”的模块。所以我将有一个OrderViewModel(或实际上有几个)。我希望将它们分开并通过MEF导入。
如何扩展/更改此方法,以便能够使用中心视图模型定位器和导入的视图模型和视图。
是的,我知道Prism和Caliburn,但是看到这种方法对我来说是非常有用的......
感谢您的帮助......
答案 0 :(得分:0)
查看MVVM Light示例(特别是ViewModelLocator),了解该模式的一个很好的例子。
注意:您不需要使用MVVM Light框架来应用此模式 - 您真正关注的是架构。框架让它更容易! FWIW,我建议您使用框架......:)