我应该在我的MVVM应用程序中使用microsoft . practices . unity . iunityconta
本文关键字:microsoft practices unity iunityconta 我的 MVVM 应用程序 我应该 | 更新日期: 2023-09-27 18:15:17
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();
}
}
他使用类IUnityContainer,我找不到。正如我在这里所理解的,我们只是创建一个窗口(因此container.Resolve
调用可以用new WatchList(...
替换,也不知何故我们将RandomQouteSource
关联为IQouteSource
的实现,但是我不清楚以后应该如何使用它。
问题是:
- 你如何在你的MVVM应用程序中创建主窗口,你也使用IUnityContainer吗?
- 总的来说是好的工艺吗?大家都知道吗?这是默认方式吗?我有什么选择?
- 哪里可以找到microsoft . practices . unity .dll?
应该吗?
那由你决定。这可能很复杂。如果你正确地使用它,无论是对你的代码来说,还是对你的代码如何工作的知识来说,它都是值得的。
您将能够识别应用程序中只应该与其他部分保持一定距离的部分。您可以更自由地更改代码,而不会影响代码的其他部分。您还可以更轻松地创建使用模拟对象的单元测试,但这只是一个附带的好处。
你必须阅读一些关于这个主题的文章,看看是否对你有意义。
(公平地说,它真的不复杂——只是在你学习它的时候,或者当你试图向一个不熟悉这些概念的人解释它的时候,它看起来很复杂)
Unity和依赖注入
IUnityContainer
是Unity的一部分,它是一个依赖注入容器库。
它可以与PRISM框架耦合在WPF/Silverlight中使用。
依赖注入有很多你想要遵循的规则来获得最大的好处。我在Unity的网站上没有看到一个简单有效的"入门"指南,Mark Seemann关于。net依赖注入的书也不是免费的。
所以我建议你在一个有很好的教程的网站上看看关于依赖注入的介绍教程:
- https://github.com/ninject/ninject/wiki/Getting-Started
这不是Unity框架,所以代码不会直接编译…
…但它应该教会你依赖注入是什么,以及为什么你想要使用它的基础知识。然后你应该能够跟随Unity页面上的示例代码和视频。
如果你跳过这些步骤,你很快就会感到困惑,并且可能至少会有几十次搬起石头砸自己的脚。
创建Windows除非在那个函数中,否则不使用容器。在其他任何地方使用它,您就没有正确使用DI容器。您只需使用容器来注册您的视图、视图模型和模型,解析您先前注册的主窗口,并在完成后处置容器。
这个过程被称为"三调用模式"。不幸的是,我没有Unity的通用示例,但这里有一篇关于另一个DI容器库的三种调用模式的文章。
你也可以在我上面链接的Ninject教程中看到这一点。
这是一种众所周知的技术,叫做依赖注入。
另一种方法是手动创建所需的依赖项。
你可以在patterns &practice - Unity from codeplex.
查看codeproject文章获取教程。
我没有使用过wpf,但我会用同样的方法来最小化依赖关系并获得更好的可测试性。
编辑
下面是另一个来自codeplex的例子。
但是从这里读取这篇文章先堆栈,因为这看起来很麻烦
使用依赖注入通常是一个很好的实践。它让您的类担心自己的关注点,而让框架担心管理依赖关系。这将在您的类中产生更集中、更可维护和更可测试的代码。Unity只是众多框架中的一种,我们可以说还有其他更好的框架,比如structuremap和castle windsor。使用容器基本上意味着你在一个地方建立一个注册表,从那里你解析你的类和它们的依赖关系,你的类在它们的构造函数或公共属性中指定它们依赖的那些东西。如果你从容器中解析一个类,它会根据依赖的类型(基于该类型在容器中注册的方式)自动解析它的依赖项。
在你的项目中包含unity最简单的方法是使用nuget。只需发出:install-package unity。你也可以下载二进制文件和源代码,并获得更多的信息在codeplex项目的unity: http://unity.codeplex.com/.一个建议是Ninject -一个轻量级的,易于使用的di工具。