zoukankan      html  css  js  c++  java
  • 从零开始在.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的知识点还不少,如果不知道的,自行百度学学,有问题随时沟通;

    关注公众号,每周最少两篇关于.NetCore相关文章

  • 相关阅读:
    [翻译] M13ProgressSuite
    控制器转场动画详解
    [翻译] SIAlertView
    隐藏导航栏之后支持手势退回上一个控制器
    UIView的无损截图
    [翻译] UIColor-uiGradientsAdditions
    简化通知中心的使用
    Java Web应用的开发环境配置
    StartUML的基础的使用,用例图,序列图
    SQLyog图形化l数据库的操作和学习
  • 原文地址:https://www.cnblogs.com/zoe-zyq/p/12213314.html
Copyright © 2011-2022 走看看