网站模块顺序调整,在手机怎样使用wordpress,wordpress 2.0漏洞,腾讯企业邮箱前言
DIP、IoC、DI
说起DI不得不提IoC这个模式#xff0c;很多人会把DI和IoC混为一谈#xff0c;但其实这两者是概念和实现的关系。
依赖倒置原则#xff08;DIP#xff09;#xff1a;软件设计原则#xff0c;要依赖于抽象#xff0c;不要依赖具体实现。
控制反转很多人会把DI和IoC混为一谈但其实这两者是概念和实现的关系。
依赖倒置原则DIP软件设计原则要依赖于抽象不要依赖具体实现。
控制反转IoC一种实现DIP原则的模式。
依赖注入DIIoC的具体实现。
DIP就好比一个目标一个法则。
IoC就好比是论文“应该怎么做才能遵循DIP”
DI就好比是实际的产品“落实到具体的语言的工具”
关于这个比喻可能不是很准确大家可以使用搜索引擎去了解更为详细的差异。
在.NET
在我接触的很多.NET项目中很少有人使用DI更别提像Orchard那样把DI用得出神入化。而复杂的代码很大一部分的原因是没有引入DI。在java中几乎从刚入门的新手都使用Spring提供的DI。 依赖注入生命周期
生命周期是指对服务实例的存活状态控制Microsoft.Extensions.DependencyInjection提供了一个枚举定义了三种生命周期状态。
类型描述Singleton单例服务从当前服务容器中获取这个类型的实例永远是同一个实例。Scoped域内单例为每个作用域创建一个服务实例也就是说域内单例域类似子容器。Transient瞬态从服务容器中每获取一次创建一个新的实例。 用例服务 代码如下 回到目录
注册服务的N种姿势 其实可以很容易的看出服务注册是通过创建一个“ServiceDescriptor”来完成的而其它方式的注册只不过是基于一个方法的封装而已让使用者可以更为方便的进行服务注册。 我们可以通过很多手段去注册一个服务但这里推荐大家优先使用扩展方法进行服务注册因为这样的代码更易读。反射循环注入时可以使用其它方式。
回到目录
服务使用
首先我们来看一下服务提供者提供的方法签名。 可以发现与服务注册一样基于同一个方法提供了很多扩展方法让使用者更加便捷的获取服务。
我们先来看“GetServiceT”与“GetRequiredServiceT”这两个方法。
这两个方法非常接近唯一不同的是GetRequiredService会在找不到服务的时候抛出异常而GetService在找不到服务时会返回null。 “GetServices”这个方法是用来获取多个服务实例该方法会返回该类型注册的多个服务实例。我们来看个例子 服务的生命周期 我们可以通过运行结果很好的理清各个生命周期的用意。下面用一张图来说明较复杂情况下“scope”的服务结果。 小技巧
注册支持延迟加载的服务
开发过程中经常有一种情况服务A的A方法依赖了服务B而服务A的B方法依赖了服务C这时候你就得在构造函数上同时声明服务B和C就像这样。 这在其它DI组件中非常常见比如autofac。而在现在我们需要这样做 原文地址http://www.cnblogs.com/ants/p/7130293.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注