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