ViewModel定位器如何在模块化系统中工作

时间:2011-07-08 09:33:16

标签: wpf silverlight mvvm ninject view-model-pattern

当我做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,但是看到这种方法对我来说是非常有用的......

感谢您的帮助......

1 个答案:

答案 0 :(得分:0)

查看MVVM Light示例(特别是ViewModelLocator),了解该模式的一个很好的例子。

注意:您不需要使用MVVM Light框架来应用此模式 - 您真正关注的是架构。框架让它更容易! FWIW,我建议您使用框架......:)