书接上文:上一节中,我们已经实现Services 层。(https://www.cnblogs.com/xuzhencheng/p/11424751.html

但是具体要如何将服务依赖注入进来呢?继续来续写我学习笔记!这节中更多的是关于NetCore 的一些基础知识。如果基础不错的小伙伴,可以略过!

正文:

看过之前博客的同学们应该对下面这张图不陌生:

图中,红色标记的,基本上都是NetCore 自带的。包括Nlog,算是net Core涉及到的语法糖。

这一节中,我将从下面几个方面对NetCore 的技术点进行说明。园子里对netCore 的讲解其实很多,我的侧重点在于结合我们现在要搭建的开发框架。进行相应的说明:

0.WebAPI 项目的建立

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

2.中间件的执行过程

3.WebAPI 的路由

4.依赖注入

5.异步编程

---------------------------------------------------------假装的分割线------------------------------------------------------------------------------

0. web API项目的建立

这部分内容,其实没什么太多可说的,最最基础的了。我就默认大家都会了。

不过还说有要说明的一点,随着Core3.0 的发布,可能有部分同学,想新建自己基于NetCore3.0 的项目。在大家去下载skd 的时候,可以看到微软的提示,要求VS更新到V16.3 以上。

然后,打开自己的VS,检查更新,执行更新操作就行了。

更新好VS2019 之后,就是下载下载,并安装netCore skd 了,大家都是成年人了,这个地方我就不占用篇幅进行介绍了。

需要说明的是,我现在的示例项目还是基于netcore 2.2 进行构建的。后期的时候,会单独出一片2.2 升级 3.0 的文章(其实网上已经很多了。。)

接下来就是新建项目的流程,这个部分我就不一一截图展示了。

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

 接下来我们把精力集中在这一节,我个人认为这部分算得上是NetCore 的核心,也是对比.netFreamwork 来说,改变比较大的。

下面这张图,是我在园子里找的,FlyLolo 的博客里。https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_5.html (也是一个介绍NetCore 的系列,有兴趣同学可以看一下。讲的很好。)

.

首先是程序起点,拿我们所建的Web API 工程来说,程序起点已经不再是Global.asax文件也没有了Application_Start() 方法,而是统一了Program.cs文件中的 Main() 函数作为程序入口。

在CreateWebHostBuilder方法中,创建并配置WebHostBuilder: 首先调用Create­DefaultBuilder( 它是一系列配置的大综合), 进行一系列配置之后, 调用 UseStartup<T>()

在Create­DefaultBuilder这里,我的理解是这样的,NetCore 项目的运行,我们可以在这个地方引用一些它内置的一些东西。比如像UseKestrel、UseIISIntegration、UseConfiguration等下。像下图这样:

但是除了NetCore 框架里面自带的这些东西以外 呢,我们可能还需要引入一些比如像Mvc、EF、Swagger等其他的一些第三方的库也好,框架也好。

那这部分内容我们怎么办呢?就是在UseStartup<T>()这里来做配置和引用了。也就是Startup.cs 。

在这里,除了构造函数以外,还有两个方法,一个是ConfigureServices、一个是Configure。看英文注释已经说的很明白了。都是在runtime 到时候会被调用。

区别是,ConfigureServices是用来做依赖注入的,在这里我们可以通过依赖注入的方式,add sercices

Configure呢,是用来配置HTTP request 管道的。

以上这些,就是我对NetCore 的加载过程的一些理解,可能有所偏差。但能力有限。希望大家可以发表自己的看法,对我所说的做一些修正。

2.中间件的执行过程

这一张图,我觉得对中间件,基本上对中间件的执行过程做了一个很好的说明。但是提到中间件,就不得不提一下过滤器(Filter)

同作为两个AOP利器,过滤器更贴合业务,它关注于应用程序本身,比如你看ActionFilter 和 ResultFilter,它都直接和你的Action,ActionResult交互了,是不是离你很近的感觉,那我有一些比如对我的输出结果进行格式化啦,对我的请求的ViewModel进行数据验证啦,肯定就是用Filter无疑了。它是MVC的一部分,它可以拦截到你Action上下文的一些信息,而中间件是没有这个能力的。

那么,何时使用中间件呢?我的理解是在我们的应用程序当中和业务关系不大的一些需要在管道中做的事情可以使用,比如身份验证,Session存储,日志记录等。其实我们的 asp.net core项目中本身已经包含了很多个中间件。

整个中间件的创建和使用,我找了一个别人的例子:(https://www.cnblogs.com/haosit/p/7754257.html

1.1 必须有一个RequestDelegate 委托用了进入一个中间件

1.2 通过构造函数设置这个RequestDelegate委托

1.3 必须有一个方法Task Invoke,在这个方法里编写中间件内容最后执行RequestDelegate委托

 using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace Haos.Develop.CoreTest
{
public class TestMiddleware
{
protected RequestDelegate Next; /// <summary>
/// 参数
/// </summary>
public string Str { get; set; } public TestMiddleware(RequestDelegate next,string s)
{
Next = next;
Str = s;
} public virtual Task Invoke(HttpContext context)
{
context.Response.WriteAsync("this is test string");
return Next(context);
}
}
}

2.编写一个扩展方法用来添加到程序中

 using Haos.Develop.CoreTest.Service;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; namespace Haos.Develop.CoreTest
{
public static class Extension
{
public static IApplicationBuilder UserTestMiddleWare(this IApplicationBuilder app, string str)
{
return app.UseMiddleware<TestMiddleware>(str);
}
}
}

3.在Startup添加中间件

   public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
//扩展方式添加
app.UserTestMiddleWare("this is test param");
//直接添加中间件方式
app.Use((context, next) =>
{
context.Response.WriteAsync("this is test");
return next();
});
}

后期我们的框架逐渐的增加日志,身份验证,异常处理的时候,都会用到中间件。所以说,对于NetCore 项目来说,这还是很重要的一环。

这一节本来想简单说一下理论性的东西的,但是不知不觉写了这么多。所以把这部分内容分为两节来写吧。

3.WebAPI 的路由、4.依赖注入、5.异步编程 还说留给下一节吧。

最后:老张发布了Blog.Core 开发社之招募计划书 (https://www.cnblogs.com/laozhang-is-phi/p/11603456.html) 有实力的小伙伴抓紧报名啊!

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

  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 基础 -2

    上节中,我们初步的介绍了一下NetCore的一些基础知识,为了控制篇幅(其实也是因为偷懒),我将NetCore 基础分为两部分来写. 0.WebAPI 项目的建立 1..NetCore 项目执行(加载 ...

  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. CSS文件引入link和@import 区别

    1.(本质区别)link 属于 HTML 标签,而 @import 完全是 css 提供的一种导入 css 文件的规则. 2.文件加载时机有差别: 当一个页面被加载的时候,link 引用的 css 会 ...

  2. Java NIO 上

    概述: NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector. 传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作, ...

  3. NLP(二十四)使用LSTM构建生成式聊天机器人

    准备 数据集:AIML数据集 下载数据集并用Notepad++打开,复制到txt文件中方便打开 代码实现 数据很少,训练轮次不多,结果不好,仅当示例 import numpy as np import ...

  4. Codeforces 919D Substring (拓扑排序+树形dp)

    题目:Substring 题意:给你一个有向图, 一共有n个节点 , m条变, 一条路上的价值为这个路上出现过的某个字符最多出现次数, 现求这个最大价值, 如果价值可以无限大就输出-1. 题解:当这个 ...

  5. D-query

    SPOJ - DQUERY 题意 求区间内出现一共有几种数字. 上次写了一个主席树,这次用一下莫队,莫队是离线询问的一种操作,将询问分块,如果在同一个块内就按照右端点排序,如果不在同一个块内就按照块的 ...

  6. CF988D Points and Powers of Two 数学结论题 规律 第十题

    Points and Powers of Two time limit per test 4 seconds memory limit per test 256 megabytes input sta ...

  7. 从SpringBoot构建十万博文聊聊Tomcat集群监控

    前言 在十万博文终极架构中,我们使用了Tomcat集群,但这并不能保证系统不会出问题,为了保证系统的稳定运行,我们还需要对 Tomcat 进行有效的运维监控手段,不至于问题出现或者许久一段时间才知道. ...

  8. 【Mac】快速复制文件路径

    一.使用Automator新建服务 二.配置 三.使用 四.创建快捷键 一.使用Automator新建服务 在应用程序文件夹里打开Automator,选择文件菜单,新建一个服务,如下  二.配置 在 ...

  9. MariaDB数据库自学一

    在CentOS下安装Mariadb 数据库,命令: yum -y mariadb mariadb.server 等待几分钟后就可以自动完成安装了,然后启动对应的服务: systemctl  start ...

  10. Java 中的array数组总结之一

    数组:是一个将同种类型的数据存储在存储单元中. 可以用三种方式声明数组: 1.数据类型 标识符[]; int mothDays[]; 2.数据类型 标识符[] = new 数据类型[大小]; int ...