实现MVVM Light工具包WPF Unity

时间:2011-02-16 09:27:26

标签: wpf unity-container mvvm-light

我正在为我的WPF应用程序使用MVVMLight工具包。 现在我正在阅读Lauren的MIX 10的演示样本。 示例代码在SL中,并使用UnityContainer。 MVV MVight工具包为WPF提供的模板不使用unitycontainer概念。如何在WPF中使用UnityContainer。

如果我的问题有道理,我现在不行。我没有看到有关如何使用ViewModelLocator的任何文档。也许有人可以提供Lauren在MIX中使用的Demo样本或WPF版本

2 个答案:

答案 0 :(得分:4)

我在WPF(MVVM Light)上使用Unity的方式是这样的:

我在应用程序根目录上创建了一个bootstrapper类,如:

public class Bootstrapper
{
    public IUnityContainer Container { get; set; }

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

        ConfigureContainer();
    }

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

这是我的引导程序。我也注册了ViewModel,因为在Locator中很容易创建它们。

接下来,我在ViewModelLocator的构造函数上创建了boostrapper,我在这里解析了每个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 :(得分:1)

我建议使用Managed Extensibility Framework。它是在.NET 4中,我将自己从统一切换到MEF。当您的应用程序增长时,我工作得非常好。你可以通过谷歌搜索找到很多信息。 祝你好运!