浅谈ASP.NET Core中IOC与DI的理解和使用

提及IOC和DI,使用过ASP.NET Core的人对这两个概念必定不陌生,早前,本身也有尝试过去了解这两个东西,可是一直以为有点很难去理解,总以为对其仍是模糊不清,因此,趁着今天有空,就去把两个概念捋清楚,并将学习过程的知识点记录下来。html

 1、IOC和DI的理解

1.1 什么是IOC?

Ioc—Inversion of Control,即控制反转,其是一种设计思想,而不是一种技术。再没有使用IOC以前,咱们通常是经过new来实例化,从而建立一个对象。可是咱们使用IOC以后,建立这个对象的控制权将由内部转换到外部,那么这个过程即可以理解为控制反转。

1.2 什么是DI(依赖注入)?

全称为Dependency Injection,意思自身对象中的内置对象是经过注入的方式进行建立。形象的说,即由容器动态的将某个依赖关系注入到组件之中。git

1.3 IOC和DI的联系?

IOC是一种设计思想,而DI是这种设计思想的一个实现。理解IOC和DI的关键是:“谁依赖谁,为何须要依赖,谁注入谁,注入了什么”。
●谁依赖于谁:固然是应用程序依赖于IoC容器;
●为何须要依赖:应用程序须要IoC容器来提供对象须要的外部资源;
●谁注入谁:很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
●注入了什么:就是注入某个对象所须要的外部资源(包括对象、资源、常量数据)

 1.4 为啥须要反转?

为了在业务变化的时候尽可能减小改动代码形成的问题。

1.5 使用DI的好处?

1)让程序之间松散耦合,减小依赖,有利于功能复用。
2)让程序总体结构更加灵活,有利于单元测试。

1.6 常见的IOC框架。

微软自带DI、Autofac、Unitygithub

2、.NET Core自身DI使用

2.1.NET Core自身DI

ASP.NET Core自己已经集成了一个轻量级的IOC容器,开发者只须要定义好接口后,在Startup.cs的ConfigureServices方法里使用对应生命周期的绑定方法便可,常见方法以下

在start.up类中ConfigureServices方法对实例进行注册框架

services.AddTransient<IApplicationService,ApplicationService>();
services.AddSingleton<IApplicationService,ApplicationService>(); 
services.AddScoped<IApplicationService,ApplicationService>();

这三个方法都是将咱们实例注册进去,只不过是生命周期不同。ide

AddSingleton:整个应用程序生命周期之内只建立一个实例,至关于一个静态类。函数

AddScoped:在同一个Scope内只初始化一个实例 ,能够理解为( 每个request级别只建立一个实例,同一个http request会在一个 scope内)。单元测试

AddTransient:每一次都会建立一个新的实例。学习

 2.2 Demo应用

1)首先定义好一个IUserService接口,而后实现该接口
  2)在startup.cs类中ConfigureServices方法中添加下面代码
3)经过构造函数来注入

4)运行,查看结果测试

 3、 采用Autofac替换IOC容器

Autofac是一款轻量级的IOC框架,目前和ASP.NET Core结合的很是好,官方网站http://autofac.org,源码下载地址https://github.com/autofac/Autofac网站

1)在Nuget中引入两个:Autofac.Extras.DynamicProxy(Autofac的动态代理,它依赖Autofac,因此能够不用单独引入Autofac)、Autofac.Extensions.DependencyInjection(Autofac的扩展)
2)在startup.cs类中ConfigureServices方法中添加如下代码:(注意:把返回值类型改成IServiceProvider)
var builder = new ContainerBuilder();//实例化Autofac容器
            builder.RegisterType<UserService>().As<IUserService>();//注册要经过反射建立的组件
            builder.Populate(services);
            var ApplicationContainer = builder.Build();
            return new AutofacServiceProvider(ApplicationContainer);//第三方IOC接管

3)一样也是经过构造函数进行注入

4)运行,查看结果

4、总结

本篇文章,主要是讲了IOC和DI的关系,以及经过微软自带的IOC框架和Autofac实如今ASP.NET Core中进行简单注入,其最大的优势就是实现了解耦的做用。一样,本篇文章也是为了记录本身学习的过程,后续有时间将会继续深刻研究关于Autofac的内容。

好文参考:http://www.javashuo.com/article/p-ggyivcwi-w.html(老张的哲学)

相关文章
相关标签/搜索