有人可以向我解释一个Unity容器的概念,就像我是一个6岁的孩子吗?它是如何工作的?它有什么作用?WPF/Prism:什么是UNITY容器?
回答
这是一个更为技术性的背景描述,我希望你仍然觉得它很有用。
一般来说,它是一个DI(依赖注入)容器。
考虑下面的类:
public class Sample
{
Service a;
public Sample()
{
a = new Service();
}
}
但问题是,它初始化它自己的Service
版本,使得它很难调整代码更改(例如,如果你想要的东西交换Service
。不同)。它也使测试变得困难。
要解决的是,并没有真正自己创建它,而是从外面得到它:
public class Sample
{
Service a;
public Sample(Service aService)
{
a = aService;
}
}
现在你已经采取了创作远离类你可以把它放在那里从外面,增加可测试性和可维护性。但是,您仍然对类Service
有依赖性。你并不是真的对那个特定的课程感兴趣,而是对它提供的行为感兴趣 - 所以你在界面中做出来。
public class Sample
{
IService a;
public Sample(IService aService)
{
a = aService;
}
}
现在,你可以用你喜欢的任何东西来替换服务。例如,您有一个班级使用服务从服务器获取数据。现在,您只想测试数据解析,而不是数据获取服务 - 只需创建一个实现接口的类,提供静态数据 - 完成!
现在,Unity开始发挥作用。目前,你必须自己解决依赖关系。什么团结确实很简单 - 它需要有dependendencies所有类和解决这些 - 所以你可以调用(伪代码,我不知道团结):
UnityContainer uc = new UnityContainer();
var a = uc.GetService<IService>();
而且它可以让你的随时可用类。
我们对此有何评论?
- 代码更易于维护,因为你不依赖于特定类型的
- 代码的可测试性
- 应用是易于扩展
作为总结:它有助于创造更好应用更快。
Unity Container就像一个装满了cookies的罐子,当你需要一个cookie时,你只需要问jar给你一个cookie。
每个cookie是有一些优点一样,你可以有一个cookie,而是因为它是很难吃的(类似单)
当你的妈妈会创建一个新的cookie,她只是把你不能吃在罐子里的饼干,而不是直接给你!
,这似乎是一个6岁的答案。 :) – 2011-01-06 06:03:25
- 1. 什么是Microsoft Unity?
- 2. 什么是在Unity容器上调用dispose的最佳方式?
- 3. 什么是Unity InjectionConstructor属性?
- 4. 什么是微件容器?
- 5. 什么是容器编排?
- 6. 独立容器vs一个容器 - Unity
- 7. Unity中的AutoFac SingleInstance()是什么?
- 8. Unity容器配置问题
- 9. Microsoft Unity容器的性能
- 10. Unity容器内存泄漏
- 11. 使用Unity IoC容器
- 12. 为什么Unity在Unity中看起来是紫色的?
- 13. 为什么MEF不是DI/IoC容器?
- 14. 什么是Laravel服务容器?
- 15. symfony2什么是容器知道
- 16. 什么是有效的容器?
- 17. 究竟是什么“密钥容器”?
- 18. 什么是Java中的容器
- 19. WPF:什么是通用容器控件?
- 20. Hyperledger Fabric中的chaincode容器是什么?
- 21. 什么是back_inserter(容器)的类型
- 22. “IoC容器”中“容器”的用途是什么?
- 23. 容器<ImplementerOfIInterface>不是容器<IInterface>。为什么不?
- 24. Unity容器无法解析我的课
- 25. Prism RegionManager和Unity容器问题
- 26. 在Unity容器中注册WCF服务
- 27. 在Unity容器无法解析字典
- 28. 如何调试Unity容器“解析”?
- 29. 从视图模型访问Unity容器
- 30. 为什么Unity不能注入一个具体的容器实现而不是IUnityContainer?
这不是说有一个Unity容器,而是'Unity'是一个特定的依赖注入(DI)容器的名称。棱镜也附带MEF并支持任何其他DI容器。 Unity刚刚排在第一位。如果您想了解Unity和MEF之间的区别,请阅读http://msdn.microsoft.com/en-us/library/ff921140(v=PandP.40).aspx上的相关章节。 – Pat 2011-01-06 18:37:17
@Pat,MEF是一个插件框架,而Unity是一个真正的DI容器。 – 2013-03-15 00:17:41