架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2536|回复: 0

[.NET Core] ASP.NET Core依赖注入使用自带的IOC容器

[复制链接]
发表于 2019-5-7 13:55:10 | 显示全部楼层
ASP.NET Core依赖注入使用自带的IOC容器
https://www.itsvse.com/thread-7562-1-1.html
(出处: 架构师_程序员)

ASP.NET Core使用Autofac实现IOC注入
https://www.itsvse.com/thread-7563-1-1.html
(出处: 架构师_程序员)

ASP.NET Core使用Autofac实现AOP拦截
https://www.itsvse.com/thread-7566-1-1.html
(出处: 架构师_程序员)

在新的ASP.NET Core中,大量的采用了依赖注入的方式来编写代码.

比如,在我们的Startup类中的ConfigureServices里,就可以看到:

AddMvc  AddDbContext  包括我们之前目录游览用到的AddDirectoryBrowser..

都是框架提供好的服务,我们直接注入就可以使用了.

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

要使用ioc,需要Startup类引用 Microsoft.Extensions.DependencyInjection(ps,这命名已经很直白了..微软..扩展...依赖注入 - - ,)

注入服务的生命周期

微软给自行注入的服务,提供了3种生命周期.

Transient(瞬时的)

每次请求时都会创建的瞬时生命周期服务。这个生命周期最适合轻量级,无状态的服务。

Scoped(作用域的)

在同作用域,服务每个请求只创建一次。

Singleton(唯一的)

全局只创建一次,第一次被请求的时候被创建,然后就一直使用这一个.

如何使用这三种生命周期呢?.我们直接在注入的时候用不同的方法就行了,代码如下:


下面,我们就来测试一下这三种生命周期的具体生成情况

我们编写三个不同名称的接口并且不同的3个类来实现接口,如下:

每个实现类的构造函数中,我们都产生了一个新的guid,通过这个GUID,我们可以判断这个类到底重新执行过构造函数没有。

注入服务到控制器

注入的方式一般有三种,构造函数注入, 方法注入,属性注入..微软自带的这个IOC容器,默认采用了构造函数注入的方式(不支持属性注入,不过可以用第三方容器替换来实现)

视图页面代码:

运行项目,通过2个不同浏览器进行访问,如下图:

QQ截图20190507134326.jpg

我们发现瞬时生命周期的,2次生成的GUID都不一致,说明对象不是同一个.

然而作用域生命周期的,因为在同一个作用域下,相同浏览器下面2次使用服务的GUID都是一致的,说明用的同一个对象.

单例情况下,两个不同浏览器访问,始终是同一个GUID,说明调用的是同一个对象。

(完)






上一篇:.NET Core Entity使用Entity Framework Core链接数据库
下一篇:ASP.NET Core使用Autofac两种方式实现IOC注入
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2020-7-11 19:29

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表