|
在新的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个不同浏览器进行访问,如下图:
我们发现瞬时生命周期的,2次生成的GUID都不一致,说明对象不是同一个.
然而作用域生命周期的,因为在同一个作用域下,相同浏览器下面2次使用服务的GUID都是一致的,说明用的同一个对象.
单例情况下,两个不同浏览器访问,始终是同一个GUID,说明调用的是同一个对象。
(完)
|
上一篇:.NET Core Entity使用Entity Framework Core链接数据库下一篇:ASP.NET Core使用Autofac两种方式实现IOC注入
|