上节中,我们初步的介绍了一下NetCore的一些基础知识,为了控制篇幅(其实也是因为偷懒),我将NetCore 基础分为两部分来写。

0.WebAPI 项目的建立

1..NetCore 项目执行(加载)过程

2.中间件的执行过程

3.WebAPI 的路由

4.依赖注入

5.异步编程

上一节中,我把0,1,2 这三部分说完了。

这一节中我们继续来讲剩下的部分。

3.WebAPI 的路由

路由有两种方式: Convention-based (按约定), attribute-based(基于路由属性配置的).

其中convention-based (基于约定的) 主要用于MVC (返回View或者Razor Page那种的).

Web api 推荐使用attribute-based. 

                          --以上内容引用自老张的博客

我们现在的框架是基于WebApi 的,所以就着重说一下attribute-based. 

这种基于属性配置的路由可以配置Controller或者Action级别, uri会根据Http method然后被匹配到一个controller里具体的action上.

4.依赖注入

DI在.NET Core里面被提到了一个非常重要的位置。但到底依赖注入是什么? 为什么要用它? 控制反转IOC(Iversion of Control),DI等概念到底该怎么理解?

下面的内容引用自:https://www.cnblogs.com/jesse2013/p/di-in-aspnetcore.html

首先是依赖,

其次是注入:

接下来是反转:

最后是容器:

我们接下来看看在控制台中对.NET Core DI的应用。在.NET Core中DI的核心分为两个组件:IServiceCollection和 IServiceProvider。
  • IServiceCollection 负责注册
  • IServiceProvider 负责提供实例
通过默认的 ServiceCollection(在Microsoft.Extensions.DependencyInjection命名空间下)有三个方法:
var serviceCollection = new ServiceCollection()
.AddTransient<ILoginService, EFLoginService>()
.AddSingleton<ILoginService, EFLoginService>()
.AddScoped<ILoginService, EFLoginService>();

这三个方法都是将我们的实例注册进去,只不过实例的生命周期不一样。

  • Transient: 每一次GetService都会创建一个新的实例
  • Scoped:  在同一个Scope内只初始化一个实例 ,可以理解为( 每一个request级别只创建一个实例,同一个http request会在一个 scope内)
  • Singleton :整个应用程序生命周期以内只创建一个实例
如果在Mvc中用过Autofac的InstancePerRequest的同学就知道,有一些对象在一个请求跨越多个Action或者多个Service、Repository的时候,比如最常用的DBContext它可以是一个实例。即能减少实例初始化的消耗,还能实现跨Service事务的功能。(注:在ASP.NET Core中所有用到EF的Service 都需要注册成Scoped )
 
而实现这种功能的方法就是在整个reqeust请求的生命周期以内共用了一个Scope。
 
具体的应用,我会在框架搭建的时候,为大家举例说明。

5.异步编程

在这里我想着重介绍一下 async 和 await 关键字

一下内容引用自微软官网:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/async/index

按照上面例子中的,当多个任务并行的时候,我们一般采用异步的方式来进行,但是如果个别任务是需要一定的先决条件的时候,我们就可以采用await 关键词来进行修饰,

await 关键字提供了一种非阻塞方式来启动任务,然后在此任务完成时继续执行。

在煎鸡蛋或培根时,此代码不会阻塞。 不过,此代码也不会启动任何其他任务。 你还是会将面包放进烤面包机里,然后盯着烤面包机直到面包弹出。 但至少,你会回应任何想引起你注意的人。 在接受了多份订单的一家餐馆里,厨师可能会在做第一份早餐的同时开始制作另一份早餐。

--以上,.netCore 的基础知识部分,就介绍 的差不多了。(虽然大部分内容都是在别的地方引用过来的。也算是给大家做一个整理吧)

接下来的,终于又可以继续搭建的我们的技术框架了!有了DI,有了await ,async.看看我们的框架可以引入哪些新的内容吧?

.netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础 -2的更多相关文章

  1. .netCore+Vue 搭建的简捷开发框架 (3)-- Services层实现

    继续交作业: 上一篇作业中我们实现了 Repository仓储层的应用.并为我们的框架引入了EFCore 详见: .netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使 ...

  2. .netCore+Vue 搭建的简捷开发框架 (5)

    文章目录:.netCore+Vue 搭建的简捷开发框架--目录 上两节的内容介绍了一些关于.netCore 相关的一些基础知识.介绍这些的目的,最主要的还是为了我们的架构搭建服务. 上一节中,我们介绍 ...

  3. .netCore+Vue 搭建的简捷开发框架--目录

    .netCore+Vue 搭建的简捷开发框架 .netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使用 .netCore+Vue 搭建的简捷开发框架 (3)-- Ser ...

  4. .netCore+Vue 搭建的简捷开发框架

    话不多说,上图: 整体项目结构如图所示,我的设计初衷是基于.netCore + DI + Vue 打造一个适合初学者的简捷开发框架. 架构模型采用基于RESTful API风格的前后台分离框架,总体分 ...

  5. .netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使用

    书接上文,继续搭建我们基于.netCore 的开发框架.首先是我们的项目分层结构. 这个分层结构,是参考张老师的分层结构,但是实际项目中,我没有去实现仓储模型.因为我使用的是EFCore ,最近也一直 ...

  6. .netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础

    书接上文:上一节中,我们已经实现Services 层.(https://www.cnblogs.com/xuzhencheng/p/11424751.html) 但是具体要如何将服务依赖注入进来呢?继 ...

  7. .netcore+vue+elementUI 前后端分离---支持前端、后台业务代码扩展的快速开发框架

    框架采用.NetCore + Vue前后端分离,并且支持前端.后台代码业务动态扩展,框架内置了一套有着20多种属性配置的代码生成器,可灵活配置生成的代码,代码生成器界面配置完成即可生成单表(主表)的增 ...

  8. Linux+.NetCore+Nginx搭建集群

    本篇和大家分享的是Linux+NetCore+Nginx搭建负载集群,对于netcore2.0发布后,我一直在看官网的文档并学习,关注有哪些新增的东西,我,一个从1.0到2.0的跟随者这里只总结一句话 ...

  9. .NetCore快速搭建ELK分布式日志中心

    懒人必备:.NetCore快速搭建ELK分布式日志中心   该篇内容由个人博客点击跳转同步更新!转载请注明出处! 前言 ELK是什么 它是一个分布式日志解决方案,是Logstash.Elastaics ...

随机推荐

  1. 4、cesium场景出图,打印图件

    cesium场景出图,打印图件 把3d渲染的页面进行截图,并可以下载到本地:代码如下: function printscreenScene() { var image = new Image();// ...

  2. 从“HDU 2005 第几天?”谈起

    在程序设计中,日期时间的处理经常会遇到.在C语言程序设计的一些教材中会出现如下例子或习题. [例1]第几天? (HDU 2005) 给定一个日期,输出这个日期是该年的第几天. Input输入数据有多组 ...

  3. java中多线程执行时,为何调用的是start()方法而不是run()方法

    Thead类中start()方法和run()方法的区别 1,start()用来启动一个线程,当调用start()方法时,系统才会开启一个线程,通过Thead类中start()方法来启动的线程处于就绪状 ...

  4. Ubuntu 14.04 java环境安装配置(不是openJAVA)

    两种配置方式 第一: 在 Ubuntu 中使用 PPA 安装 Java 8 ( 支持 Ubuntu 10.04 - Ubuntu 14.04 ): sudo add-apt-repository pp ...

  5. error LNK1104: 无法打开文件“opencv_world331.lib” LINK : fatal error LNK1104: 无法打开文件“opencv_world331.lib”,程序报这个错误时应该怎么解决?

    这几天被这个错误搞得很头大,看了很多大神的解决办法,涉及到opencv的版本的windows的操作系统等各种知识,但是我尝试了很多办法最终都没有解决.今天晚上突然想到之前遇到这种无法打开lib文件时, ...

  6. thinkphp6.0 集成Alipay 手机和电脑端支付的方法

    本文由 BI8EJM 原创,转载请注明出处! 第一步 下载 Alipay 的PHP SDK  :https://docs.open.alipay.com/54/103419/ 第二步 解压下载都到的压 ...

  7. 18 (OC)* RunTime

    目录: 一.怎么理解OC是动态语言,Runtime又是什么?二.理解消息机制的基本原理三.与Runtime交互的三种方式四.分析Runtime中的数据结构五.深入理解Rutime消息发送原理六.多继承 ...

  8. FEDay会后-Serverless与云开发,可能是前端的下一站

    进化本身是生物体与环境之间持续不断的信息交换的具体表现. -- 摘自<信息简史> 很荣幸在9月21号成都举办的第五届FEDay上作为讲师为大家分享腾讯云在近两年推出的云开发相关的技术和知识 ...

  9. 跟我学SpringCloud | 第十九章:Spring Cloud 组件 Docker 化

    前面的文章<跟我学SpringCloud | 第十八篇:微服务 Docker 化之基础环境>我们介绍了基础环境系统和 JRE 的容器化,这一节我们介绍 Spring Cloud 组件的容器 ...

  10. 实操:Could not autowire No beans of 'FastDFS Client' type found 的解决方法

    前言: 今天接手了同事之前做的一个小项目,里面涉及到了 FastDFS 的使用.但是当我在本地运行项目的时候,却报了 Could not autowire No beans of 'FastDFS C ...