我应该在我的MVVM应用程序中使用Microsoft.Practicies.Unity.IUnityContainer吗?

jav*_*red 1 c# wpf dependency-injection unity-container mvvm

Jason Dolinger在他的视频中(现在热门)www.lab49.com/files/videos/Jason%20Dolinger%20MVVM.wmv(从0.59到1.04)使用这样的代码:

public partial App: Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        IUnityContainer container = new UnityContainer();
        RandomQuoteSource source = new RandomQuoteSource();
        container.RegisterInstance<IQuoteSource>(source);

        WatchList window = container.Resolve<WatchList>();
        window.Show();
    }
}
Run Code Online (Sandbox Code Playgroud)

他使用我无法找到的IUnityContainer类.据我所知,我们只是创建了一个窗口(所以container.Resolve调用可以替换new WatchList(...,也可以用某种方式RandomQouteSource作为实现关联IQouteSource,但是我不清楚如何在以后使用它.

问题是:

  • 如何在MVVM应用程序中创建主Windows,您是否也使用IUnityContainer?
  • 一般来说它是好的技术吗?它是众所周知的吗?这是做这些事情的默认方式吗?我有什么替代品?
  • 我在哪里可以找到Microsoft.Practicies.Unity.dll?

Mer*_*ham 7

如若你?

随你(由你决定.它可能很复杂.如果您正确使用它,那么对于您的代码以及您对代码如何工作的了解都是值得的.

您将能够识别应用程序中仅应与臂部长度接触的部件.您可以更自由地更改代码,而不会影响代码的其他部分.您还可以更轻松地创建使用模拟对象的单元测试,但这只是一个附带的好处.

您必须阅读有关此主题的一些文章,看看它是否对您有意义.

(公平地说,它确实并不复杂 - 当你正在学习它时,或者当你试图向那些不熟悉概念的人解释它时)

统一和依赖注入

IUnityContainerUnity的一部分,它是一个依赖注入容器库.

它可以与PRISM框架结合使用,以便在WPF/Silverlight中使用.

依赖注入有很多规则,您需要遵循这些规则才能获得最大的收益.我没有在Unity的网站上看到一个简单或有效的"入门"指南,Mark Seemann的.Net中的依赖注入一书并不是免费的.

所以我建议你在一个有很好教程的网站上查看关于依赖注入的介绍教程:

这不是Unity框架,因此代码不会直接编译......

...但它应该教你依赖注入的基础知识,以及为什么要使用它.然后,您应该能够关注Unity页面上的示例代码视频.

如果你跳过这些步骤,你会很快感到困惑,并且很可能会在脚下射击至少几十次.

创建Windows

除了那个函数之外,你不使用容器.在其他任何地方使用它,并且您没有正确使用DI容器.您只需使用容器注册视图,查看模型和模型,解析先前注册的主窗口,并在完成后处置容器.

这个过程称为"三呼模式".不幸的是,我没有Unity的任何通用示例,但这里有一篇关于另一个DI容器库的三个调用模式的文章.

您可能也会在我上面链接的Ninject教程中看到这一点.