实施 MVVM Light 工具包 WPF Unity

发布于 2024-10-17 18:41:14 字数 281 浏览 5 评论 0原文

我正在为我的 WPF 应用程序使用 MVVMLight 工具包。 现在我正在浏览 Lauren 的 MIX 10 的演示样本。 示例代码采用 SL 格式,并使用 UnityContainer。 MVVMLight 工具包为 WPF 提供的模板没有利用 unitycontainer 概念。如何在 WPF 中使用 UnityContainer。

我现在不知道我的问题是否有意义。我没有看到任何有关如何使用 ViewModelLocator 的文档。也许有人可以提供 Lauren 在 MIX 中使用的 Demo 的示例或 WPF 版本

I am using the MVVMLight toolkit for my WPF application.
Now I was going through the demo sample from Lauren's MIX 10.
The sample code is in SL, and makes use of the UnityContainer.
The template provided by MVVMLight toolkit for WPF does not utilizes the unitycontainer concept. How can I make use of the UnityContainer in WPF.

I don't now if my question even makes sense. I do not see any documentation on how to use the ViewModelLocator. Maybe some one can provide a sample or a WPF version of the Demo used by Lauren in MIX

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

羁〃客ぐ 2024-10-24 18:41:14

我在 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>();
    }
}

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

接下来,我在 ViewModelLocator 的构造函数上创建 bootstrapper,并在此处解析每个 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 很简单,它只是创建 bootstrapper 并解析 ViewModel,并且这些 VM 也将通过容器解析它们的依赖关系: )

也许有一个最好的方法来实现这一点,但这确实是一个好的开始。

The way I use Unity on WPF (MVVM Light) is like this:

I create a bootstrapper class on the application root, something like:

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

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

        ConfigureContainer();
    }

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

This is my bootstrapper. I register the ViewModels too because is easy create them in the Locator.

Next, I create the boostrapper on the ViewModelLocator's constructor and I resolve every ViewModel here, like:

public class ViewModelLocator
{
    private static Bootstrapper _bootStrapper;

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

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

As you see, my ViewModelLocator is simple, it just create the bootstrapper and resolve the ViewModel, and these VM will resolve their dependencies through the container too :)

Maybe there is a best way to archieve this, but this is a good start indeed.

如梦 2024-10-24 18:41:14

我建议使用托管可扩展性框架。它在 .NET 4 中,我将自己从 unity 切换到 MEF。当您的应用程序不断增长时,我的工作非常出色。您可以通过使用谷歌搜索找到很多相关信息。
祝你好运!

I would advise to use Managed Extensibility Framework. It's in .NET 4 and I switched myself from unity to MEF. I works very great when your app is growing. You can find lots of info on it by search using google.
Good luck!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文