1

当我做 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();

    }
}

现在我正在考虑添加另一个名为“订单”的模块。所以我会有一个 OrderViewModel(或者在现实生活中的几个)。我想让它们通过 MEF 分离和导入。

我如何扩展/更改这种方法以能够使用中心视图模型定位器和导入的视图模型和视图。

是的,我知道 Prism 和 Caliburn,但看到这种方法对我来说会很有趣......

谢谢你的帮助....

4

1 回答 1

0

查看 MVVM Light 示例(特别是ViewModelLocator),以获取该模式的一个很好的示例。

注意:你不需要使用 MVVM Light 框架来应用这个模式——你真正在看它的架构。该框架只是让它变得更容易!FWIW,我确实建议您使用框架... :)

于 2011-09-23T00:44:36.890 回答