从零开始在.NetCore3.1 Web项目中使用IOC

前言

  如今的编程世界中,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

传统方式--本身New 

  1. 分别在DotNetCoreBll 和 DotNetCoreDal中增长 类 UserBll  和 UserDal  ,  里面代码以下:对象

  类UserDal  :blog

  

 

   类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的知识点还很多,若是不知道的,自行百度学学,有问题随时沟通;

相关文章
相关标签/搜索