拥抱.NET Core系列:依赖注入(1)
前言DIP、IoC、DI说起DI不得不提IoC这个模式,很多人会把DI和IoC混为一谈,但其实这两者是概念和实现的关系。 依赖倒置原则(DIP):软件设计原则,要依赖于抽象,不要依赖具体实现。 控制反转(IoC):一种实现DIP原则的模式。 依赖注入(DI):IoC的具体实现。 DIP就好比一个目标一个法则。 IoC就好比是论文,“应该怎么做才能遵循DIP” DI就好比是实际的产品,“落实到具体的语言的工具” 关于这个比喻可能不是很准确,大家可以使用搜索引擎去了解更为详细的差异。 在.NET在我接触的很多.NET项目中,很少有人使用DI,更别提像Orchard那样把DI用得出神入化。而复杂的代码很大一部分的原因是没有引入DI。在java中几乎从刚入门的新手都使用Spring提供的DI。 依赖注入生命周期生命周期是指对服务实例的存活状态控制,"Microsoft.Extensions.DependencyInjection"提供了一个枚举定义了三种生命周期状态。
用例服务代码如下: 回到目录 注册服务的N种姿势
我们可以通过很多手段去注册一个服务,但这里推荐大家优先使用扩展方法进行服务注册,因为这样的代码更易读。反射循环注入时可以使用其它方式。 回到目录 服务使用首先我们来看一下服务提供者提供的方法签名。 可以发现与服务注册一样,基于同一个方法提供了很多扩展方法让使用者更加便捷的获取服务。 我们先来看“GetService<T>”与“GetRequiredService<T>”这两个方法。 这两个方法非常接近,唯一不同的是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跨平台或扫描二维码关注 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |