Fem*_*ref 54
这是一个更加技术性的背景介绍,我希望你仍然觉得它很有用.
一般来说,它是一个DI(依赖注入)容器.
鉴于以下课程:
public class Sample
{
Service a;
public Sample()
{
a = new Service();
}
}
Run Code Online (Sandbox Code Playgroud)
问题在于它初始化了自己的版本Service,因此很难调整代码更改(即,如果你想Service用不同的东西进行交换).它也使测试变得困难.
要解决这个问题,请不要自己创建它,而是从外部获取它:
public class Sample
{
Service a;
public Sample(Service aService)
{
a = aService;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您已经将创建从课堂上移除,您可以从外部将其放入其中,从而提高可测试性和可维护性.但是,您仍然依赖于该类Service.你对这个特定的类并不感兴趣,但是它提供的行为 - 所以你在界面中做出来.
public class Sample
{
IService a;
public Sample(IService aService)
{
a = aService;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用您喜欢的任何内容替换服务.例如,您有一个类使用服务从服务器获取数据.现在,您只想测试数据解析而不是数据获取服务 - 只需创建一个实现接口的类,提供静态数据 - 完成!
现在,Unity开始发挥作用.目前,您必须自己解决依赖关系.统一做的很简单 - 它需要所有具有依赖关系的类并解析那些 - 所以你可以调用(伪代码,我不知道统一):
UnityContainer uc = new UnityContainer();
var a = uc.GetService<IService>();
Run Code Online (Sandbox Code Playgroud)
它让你成为一个易于使用的课程.
我们对此有何看法?
总结:它有助于更快地创建更好的应用程序.
Tal*_*ner 37
Unity Container就像一个装满cookie的罐子,当你需要一个cookie时,你只需要jar给你一个cookie.
每个cookie都有一些美德,比如你可以有一个饼干,但你不能吃它,因为它很难吃(像单身人士的东西)
当你妈妈创造一个新的饼干时,她只是把那个饼干放在罐子里,而不是直接给你!
| 归档时间: |
|
| 查看次数: |
22563 次 |
| 最近记录: |