Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 依赖注入-口语解释_C#_Asp.net_Dependency Injection - Fatal编程技术网

C# 依赖注入-口语解释

C# 依赖注入-口语解释,c#,asp.net,dependency-injection,C#,Asp.net,Dependency Injection,最近我被要求用口语解释来表达DI 我回答说: (一) 我要去一家酒店。我点了食物。酒店管理人员让我清理盘子和盘子 清理表。因此,在这里,我是一个客户机,负责管理服务(实例化、执行、处理)。但DI将这些任务解耦,因此服务使用者无需担心控制服务的生命周期 (二) 他还问是否有任何microsoft API遵循DI?我回答(这是我的猜测)在WCF中,您可以使用ChannelFactory创建一个代理来控制工厂的生命周期 对于第(1)项,他说只有10%是正确的 对于第(2)项,他说这是工厂模式,而不是依

最近我被要求用口语解释来表达DI

我回答说:

(一) 我要去一家酒店。我点了食物。酒店管理人员让我清理盘子和盘子 清理表。因此,在这里,我是一个客户机,负责管理服务(实例化、执行、处理)。但DI将这些任务解耦,因此服务使用者无需担心控制服务的生命周期

(二) 他还问是否有任何microsoft API遵循DI?我回答(这是我的猜测)在WCF中,您可以使用ChannelFactory创建一个代理来控制工厂的生命周期

对于第(1)项,他说只有10%是正确的

对于第(2)项,他说这是工厂模式,而不是依赖注入

事实上,我的解释出了什么问题(除了我的英语不好)?这些问题的真正答案是什么


我在等待你有价值的建议。

我认为你的第一个答案非常准确,尽管可以详细说明。这让我想起了这里的堆栈溢出

在我看来,最重要的DI模式是构造函数注入,但实际上很难在BCL中找到例子

但是,System.IO.StreamWriter就是一个例子。在众多的构造器中,它有这样一个:

public StreamWriter(Stream stream);
因为Stream是一个抽象类,所以它非常适合依赖项的描述,并且它被注入到StreamWriter中

您的WCF示例是一个抽象工厂。这是一个与DI相关的非常重要的模式,但不是DI本身。

我认为“口语化”可能意味着使用非技术语言来描述,而不是给出一个真实的例子。因此:

  • 依赖注入允许用户提供自己的问题解决方案,并将其与预构建系统集成。我现在想不出一个现实世界中的类比

  • 考虑一个接受接口作为参数的框架方法,您可能有一个依赖注入的示例。我想Linq名称空间中有很多例子

  • 1. 我认为在你的酒店例子中,这更像是你来吃饭,你被要求首先建造厨房,制作盘子、碗和餐具,建造桌子和椅子,种植小麦和蔬菜,屠宰肉类,然后烹饪和清理

    我的例子是手术。外科医生的责任是做手术。就这样。她不做手术器械,也不去把它们都从柜子里拿出来。当她来做手术时,所有的工具都排好了队,为她准备好了——它们都是从外面提供的,外科医生不关心也不需要知道是谁把它们放在那里的,只要它们在她需要工作时可用并准备好

    同样,在给定的类中,依赖项注入意味着该类依赖的任何其他组件都应该作为参数“注入”到构造函数中,或者在实例化该类时设置属性。这个班不关心发现或创造这些东西

    2.
    我已经提到,Microsoft模式与实践/企业库通过Unity应用程序块(一种控制容器的反转)支持DI,我认为ASP.NET MVC库使用DI。

    考虑一下使用接口的情况。