如今的编程世界中,IOC已经成为了标配,毕竟解耦对于代码开发和维护都提高了很大的效率;而.NetCore中就自带了IOC功能,下面记录一下.NetCore Web项目中IOC的使用及如何集成AutoFac; 编程
开发环境: .NetCore3.1;注:须要安装对应的SDK版本;ide
1. 选择模板 -- ASP.NET Core Web应用程序;函数
2. 添加两个项目DotNetCoreBll 和 DotNetCoreDal ,选模板的时候选择 类库(.Net Core);优化
最终项目结构spa
加这两个程序集的目的就是为了模拟业务处理,DotNetCoreBll 业务处理;DotNetCoreDal 获取数据; 设置DotNetCoreIoc 为启动项目运行,以下图设计
出现以上界面项目建立成功;3d
1. 分别在DotNetCoreBll 和 DotNetCoreDal中增长 类 UserBll 和 UserDal , 里面代码以下:对象
类UserDal :blog
类UserBll:继承
2. 在HomeController中增长一个Api
而后,运行项目,访问http://localhost:5000/Home/GetUserName 地址,运行以下:
综上, 能够看出,传统方式也能正常开发功能,可是各个程序集之间耦合性太太强,不符合软件设计原则,当项目规模变大时,项目也很差维护; 从开发角度来讲,须要开发人员手动建立对象,开发效率不高;
1. 在Web项目中找Startup.cs 文件, 打开文件,在方法ConfigureServices中将对应类型注入到容器中,以下:
2. 在调用控制器构造函数中进行注入, 这里是在HomeController中,以下:
3. 在对应API中使用
运行访问
如上,正常访问,可是虽然减小了开发者手动new对象的过程,可是耦合性的问题仍是存在的呀,因此这里引入依赖倒置原则,即依赖于抽象,不依赖于具体,因此咱们一般会引入对应的抽象层,一般是接口的形式;
抽象化,增长接口层,并添加对应的接口,项目结构以下:
IUserBll 和 IUserDal 代码代码分别以下:
将原来的UserBll和UserDal分别继承IUserBll和IUserDal,以下:
IOC根据以上三步使用,修改对应的代码
1. 在注入容器中进行优化:
2. 构造函数注入,改成接口:
3. 使用的地方不变
运行如图,正常运行:
经过这样优化,耦合性下降了,依赖于抽象,平时也都是这么用;
缺点: 因为.NetCore自带的IOC,在注册到容器的时候,只能指定对应的类型,当项目类型比较多的时候,在注册时就会大量的写代码;
措施: 一般咱们会引入第三组件进行解决,由于第三方组件提供了注册程序集的功能,这里主要记录一下AutoFac在.NetCore项目中的使用;
1. 在Web项目中经过Nuget引入AutoFac包;
2. 首先在 Startup.cs 中添加 ConfigureContainer 方法, 方法名不变;
3. 修改 Program.cs 将默认ServiceProviderFactory指定为AutofacServiceProviderFactory
弄完以上步骤,注释掉原来的注入
运行项目,看结果正常:
综上所述,.NetCore项目中Ioc及集成Autofac的使用看着比较简单,但以上例子只修改了业务层, Dal层没有优化,大家能够参考业务层,能够练习一下Dal层的优化; 另外Autofac的知识点还很多,若是不知道的,自行百度学学,有问题随时沟通;