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

前言

  现在的编程世界中,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的知识点还不少,如果不知道的,自行百度学学,有问题随时沟通;

猜你喜欢

转载自www.cnblogs.com/zoe-zyq/p/12213314.html
今日推荐