.netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础
书接上文:上一节中,我们已经实现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: 首先调用CreateDefaultBuilder( 它是一系列配置的大综合), 进行一系列配置之后, 调用 UseStartup<T>()
在CreateDefaultBuilder这里,我的理解是这样的,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 基础的更多相关文章
- .netCore+Vue 搭建的简捷开发框架 (3)-- Services层实现
继续交作业: 上一篇作业中我们实现了 Repository仓储层的应用.并为我们的框架引入了EFCore 详见: .netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使 ...
- .netCore+Vue 搭建的简捷开发框架 (5)
文章目录:.netCore+Vue 搭建的简捷开发框架--目录 上两节的内容介绍了一些关于.netCore 相关的一些基础知识.介绍这些的目的,最主要的还是为了我们的架构搭建服务. 上一节中,我们介绍 ...
- .netCore+Vue 搭建的简捷开发框架--目录
.netCore+Vue 搭建的简捷开发框架 .netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使用 .netCore+Vue 搭建的简捷开发框架 (3)-- Ser ...
- .netCore+Vue 搭建的简捷开发框架
话不多说,上图: 整体项目结构如图所示,我的设计初衷是基于.netCore + DI + Vue 打造一个适合初学者的简捷开发框架. 架构模型采用基于RESTful API风格的前后台分离框架,总体分 ...
- .netCore+Vue 搭建的简捷开发框架 (2)--仓储层实现和EFCore 的使用
书接上文,继续搭建我们基于.netCore 的开发框架.首先是我们的项目分层结构. 这个分层结构,是参考张老师的分层结构,但是实际项目中,我没有去实现仓储模型.因为我使用的是EFCore ,最近也一直 ...
- .netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础 -2
上节中,我们初步的介绍了一下NetCore的一些基础知识,为了控制篇幅(其实也是因为偷懒),我将NetCore 基础分为两部分来写. 0.WebAPI 项目的建立 1..NetCore 项目执行(加载 ...
- .netcore+vue+elementUI 前后端分离---支持前端、后台业务代码扩展的快速开发框架
框架采用.NetCore + Vue前后端分离,并且支持前端.后台代码业务动态扩展,框架内置了一套有着20多种属性配置的代码生成器,可灵活配置生成的代码,代码生成器界面配置完成即可生成单表(主表)的增 ...
- Linux+.NetCore+Nginx搭建集群
本篇和大家分享的是Linux+NetCore+Nginx搭建负载集群,对于netcore2.0发布后,我一直在看官网的文档并学习,关注有哪些新增的东西,我,一个从1.0到2.0的跟随者这里只总结一句话 ...
- .NetCore快速搭建ELK分布式日志中心
懒人必备:.NetCore快速搭建ELK分布式日志中心 该篇内容由个人博客点击跳转同步更新!转载请注明出处! 前言 ELK是什么 它是一个分布式日志解决方案,是Logstash.Elastaics ...
随机推荐
- javaio字节流复制文件夹
public class Copy1 { public static void main(String[] args) throws IOException { File src=new File(& ...
- JS实现停留几秒sleep,Js中for循环的阻塞机制,setTimeout延迟执行
//第一种,使用while循环 function sleep(delay) { var start = (new Date()).getTime(); while((new Date()).getTi ...
- 【原创】Linux cpufreq framework
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本: ...
- IDEA-Maven项目的jdk版本设置
在 Intellij IDEA 中,我们需要设置 Settings 中的 Java Compiler 和 Project Structure 中的 Language Level 中的 jdk 版本为自 ...
- PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx
PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx 在写 PyTorch 代码时,我们会发现一些功能重复的操作,比如卷积.激活.池化等操作.这些操作分别可 ...
- hdu-6621 K-th Closest Distance
题目链接 K-th Closest Distance Problem Description You have an array: a1, a2, , an and you must answer ...
- P1963 [NOI2009]变换序列 倒叙跑匈牙利算法
题意 构造一个字典序最小的序列T,使得 Dis(i, Ti) = di,其中i是从0开始的,Dis(x,y)=min{∣x−y∣,N−∣x−y∣} ,di由题目给定. 思路 二分图匹配,把左边的看成i ...
- 2019 HZNU Winter Training Day 13 Comprehensive Training
A.Jongmah CodeForces-1110D 题意:你在玩一个数字游戏,有一堆写在瓦片上的数字,希望你能组成最多的三元组(三个数字相同,或顺子). 这题用到的方法是动态规划.f[i][j] ...
- 树莓派4B安装64位Linux(不用显示器键盘鼠标)
入手了树莓派4B,我对它的定位是作为一个Docker实验环境,平时用到的镜像多为Java服务端常用的技术.以及自己作的Java应用镜像,因此宿主机需要64位操作系统,而树莓派官方操作系统只有32位的, ...
- WordCount--统计输入文件的字符数、行数、单词数(java)--初级功能
码云地址: https://gitee.com/YuRenDaZ/WordCount 个人PSP表格: PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 180 ...