MVVM和依赖注入

Dar*_*ung 6 c# unity-container mvvm

我目前正在学习MVVM模式,我正在学习的教程使用Unity for DI.我之前没有真正使用过DI,只是想澄清一下我对这个特定代码如何工作的想法.

在视图我有:

private ViewModel vm;

    [Dependency]
    public ViewModel VM
    {
        set
        {
            vm = value;
            this.DataContext = vm;
        }

    }
Run Code Online (Sandbox Code Playgroud)

依赖属性告诉Unity注入此处的位置.ViewModel构造函数接受一个在Unity中注册的IQuoteSource对象:

        IUnityContainer container = new UnityContainer();
        RandomQuoteSource randomQuoteSource = new RandomQuoteSource();
        container.RegisterInstance<IQuoteSource>(randomQuoteSource);
        MainWindow window = container.Resolve<MainWindow>();
        window.Show();
Run Code Online (Sandbox Code Playgroud)

这究竟是如何工作的,因为我从未使用上面的属性显式创建ViewModel的对象.这是否都在Unity中处理,如果是这样,它是如何实现的?

谢谢.

Abd*_*men 6

这与MVVM模式本身没有太大关系,除了视图对其ViewModel的依赖性是通过依赖注入解决的事实.

对于它的工作原理,它非常简单.DI有3个简单的概念:

第一个是声明一个依赖项,其中一些对象通过构造函数或属性指定它依赖于某些东西(在您的示例中使用的是这种情况DependencyAttribute).

第二个概念是注册,您可以在其中注册对象所具有的依赖项的实现(在您的情况下,您注册了该实现IQuoteSource).请注意,您不必注册 ViewModel,因为它实际上并不是您依赖的接口的实现.

第三个是粘合在一起的东西,它解决了依赖关系,你要求容器为你解决某些类型,然后它会查看对象声明的依赖关系(在你的情况下,你正在解决MainWindow它有一个依赖于ViewModel),找到正确的注册实现并解决它.此行为通过对象图的分辨率级联(这解析了ViewModel对其的依赖性IQuoteSource).

希望这可以帮助 :)