实现MVVM Light工具包WPF Unity

6
我正在为我的WPF应用程序使用MVVMLight工具包。现在,我正在查看Lauren的MIX 10演示示例。示例代码是SL格式的,并使用UnityContainer。MVVMLight工具包为WPF提供的模板不使用unitycontainer概念。我该如何在WPF中使用UnityContainer?
我不知道我的问题是否有意义。我没有看到任何关于如何使用ViewModelLocator的文档。也许有人可以提供一个示例或Lauren在MIX中使用的Demo的WPF版本。
2个回答

4
我在WPF(MVVM Light)上使用Unity的方式如下:
我在应用程序根目录创建一个引导程序类,例如:
public class Bootstrapper
{
    public IUnityContainer Container { get; set; }

    public Bootstrapper()
    {
        Container = new UnityContainer();

        ConfigureContainer();
    }

    private void ConfigureContainer()
    {
        Container.RegisterType<IMyRepo, MyRepo>();
        Container.RegisterType<MainViewModel>();
    }
}

这是我的引导程序。我也注册ViewModels,因为在定位器中创建它们很容易。
接下来,在ViewModelLocator的构造函数中创建引导程序,并在此处解决每个ViewModel,例如:
public class ViewModelLocator
{
    private static Bootstrapper _bootStrapper;

    static ViewModelLocator()
    {
        if (_bootStrapper == null)
            _bootStrapper = new Bootstrapper();
    }

    public MainViewModel Main
    {
            get { return _bootStrapper.Container.Resolve<MainViewModel>(); }
    }
}

如您所见,我的 ViewModelLocator 很简单,它只是创建启动程序并解析 ViewModel,这些 VM 也将通过容器来解析它们的依赖项。也许有更好的方法来实现这一点,但这确实是一个不错的开始。

1
我建议使用托管可扩展性框架(Managed Extensibility Framework)。它在.NET 4中,我自己从Unity转换到MEF。当您的应用程序不断增长时,它非常出色。您可以通过使用谷歌搜索找到大量相关信息。 祝你好运!

这确实是一个问题,因为MEF仅适用于.NET 4。我猜你使用的是http://blog.galasoft.ch/archive/2010/03/16/sample-code-for-my-mix10-talk-online.aspx中的源代码?里面有一个相当不错的示例。建议你看一下。如果有任何不清楚的地方,请发表另一条评论,我会查看它! - JLaanstra
我正在跟随那个示例。因此,当我使用模板创建了一个新项目并按照Demo-2进行操作时,我遇到了问题。因为演示是针对SL的,而我正在做一个WPF应用程序,UnityContainer在WPF中不可用。 :( - xaria

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接