有人可以向我解释Unity容器的概念,比如我是一个6岁的孩子吗?它是如何工作的以及它的作用是什么?
答案 0 :(得分:49)
这是对背景的更具技术性的描述,我希望你仍然觉得它很有用。
一般来说,它是一个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开始发挥作用。目前,您必须自己解决依赖关系。统一做的很简单 - 它需要所有具有依赖关系的类并解析那些 - 所以你可以调用(伪代码,我不知道统一):
UnityContainer uc = new UnityContainer();
var a = uc.GetService<IService>();
它为你提供了易于使用的课程。
我们对此有何看法?
总结:它有助于更快地创建更好的应用程序。
答案 1 :(得分:36)
Unity Container就像一个装满cookie的罐子,当你需要一个cookie时,你只需要jar给你一个cookie。
每个cookie都有一些美德,比如你可以有一个cookie,但你不能吃它,因为它很难吃(像单身一样)
当你的妈妈创建一个新的cookie时,她只是把那个cookie放在罐子里而不是直接给你!
答案 2 :(得分:7)
我建议您观看Mike Taulty's Prism video series
前两章将回答你的问题,你可以看其他章节来学习棱镜(虽然它的版本2和相当陈旧,基本原理保持不变......)
祝你好运:)