从明面上学习ASP.NET Core

一、前言

    这篇文章就是从能看到地方去学习Core,没有很深奥,也没有很难懂,现在我们开始吧。

二、构建项目,引发思考

    创建项目的步骤真的很简单,你要是不会,我真也没法了,我这是创建的MVC的项目。

    640?wx_fmt=png

    640?wx_fmt=png

    接下来我们开始找不同,这个小学生也会的东西,我相信也难不到大家,这里我们主要说重点的不同:

    1. 少了Content和Scripts文件夹,多了wwwroot;

    2.少了配置文件web.config,多了appsettings.json;

    3.少了App_Start文件夹,多了Program.cs和Startup.cs;

   后面确实,实现了前面的功能,接下来引发下我们的思考,带着这些问题我们来学习Core:

    配置文件:

    1.为什么appsettings.json能默认成为配置文件?

    2.怎么读取配置文件?

    3.Global.asax如何在core中体现;

   DI:

   1.为什么全部能按照接口的方式进行注入?

   2.怎么替换掉内置的DI?

   MVC:

   1.Core的请求和MVC的请求有什么不同?

   2.Core的认证和授权怎么处理?

   怀着这些问题我们来简单结合源码分析下,另外最后我们在上传一个简单的增删改查项目完成我们项目结束。

三、配置文件

   GitHub地址:https://github.com/aspnet/MetaPackages/tree/dev/src/Microsoft.AspNetCore

   1.为什么appsettings.json能默认成为配置文件?

   这个问题看下主要部分在这个地址下面:https://github.com/aspnet/MetaPackages/blob/dev/src/Microsoft.AspNetCore/WebHost.cs,我截取下主要代码;

640?wx_fmt=png

640?wx_fmt=png

  2.怎么读取配置文件?

   我主要提供了2种方式,这里前提是引入Microsoft.AspNetCore.All这个dll,这个里面很多我们需要的东西

   从appsettings.json增加配置读取,有两种一个是更改配置以后立即生效,一种是重启以后才生效,具体看下代码:

640?wx_fmt=png

  从外部引入配置文件,这个时候我们要做一件事情,将你新建的配置文件的属性设置为始终复制,至于这个原理是啥我不懂,有大神可以指点下,剩下的具体看代码吧;

640?wx_fmt=png

3.Global.asax如何在core中体现;

640?wx_fmt=png

  IApplicationLifetime这个实现替代在传统应用中Application中生命周期的位置,这个我在上面的代码中已有体现,使用命令的方式运行在控制台就可以看到;

四、DI

 针对这个问题,我只能这么说为了为了提高大家,给大家实现一个容器,让大家玩的开心一下,让DI和IOC的思想深入内心,这点有点类似Java操作了,其实早就该这样了,已经让我们变大太懒了,哈哈,借用下蒋神的话,ASP.NET Core的核心是通过一个Server和若干注册的Middleware构成的管道,不论是管道自身的构建,还是ServerMiddleware自身的实现,以及构建在这个管道的应用,都需要相应的服务提供支持,ASP.NET Core自身提供了一个DI容器来实现针对服务的注册和消费。换句话说,不只是ASP.NET Core底层框架使用的服务是由这个DI容器来注册和提供,应用级别的服务的注册和提供也需要以来这个DI容器,所以正如本文标题所说的——学习ASP.NET Core,你必须了解无处不在的依赖注入

 附上大神的地址:https://www.cnblogs.com/artech/p/dependency-injection-in-asp-net-core.html

 不懂DIIOC的我也附上腾飞大神的地址:https://www.cnblogs.com/jesse2013/p/di-in-aspnetcore.html,

 腾飞大神博客里面已经将我想要的说2个问题说的很明白了,我这里还是在稍稍说一下吧。

 生命周期问题:

   Transient: 每一次GetService都会创建一个新的实例

   Scoped每次Http请求只会产生一个实例;

   Singleton整个应用程序生命周期以内只创建一个实例 

   这个大神博客里面也有介绍,官方也有介绍,大家可以看下https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.1

   容器的替换:

640?wx_fmt=png

五、MVC

   1.Core的请求和MVC的请求有什么不同?

   看图说话,主要设计不同主要体现在蒋神说的那句话,Core按照中间件的形式设计,最后全部注入到DI,这个时候我们考虑一个问题,我们想替换任何一个都将变得很容易,但是同样我们又会衍生另外一个问题,当我们服务之间存在依赖的时候,就需要按照顺序进行注入,这个问题需要重视一下,当然微软在设计上也考虑到这点,这里也是简单写个小demo,当你访问网站的时候就会发现网站按照顺序输出来了。MVC还是在IHttpMoudle和IHttpHandle上面做扩展或解耦,整体上本质是不变得,对这块不了解的可以推荐几篇博客给大家看看;推荐大龙龙MVC系列:http://www.cnblogs.com/edisonchou/p/3911558.html

    640?wx_fmt=png

    640?wx_fmt=png

640?wx_fmt=png

 六、结束

    下一篇我们再说,Demo还没时间做好,另外强烈推荐大家去看官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/migration/http-modules?view=aspnetcore-2.1,真的比什么都管用!!!

原文地址:https://www.cnblogs.com/wtzbk/p/9196185.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线段树-区间的交

区间的交 题目来源 孙耀峰Segment_Tree.pdf 原创 题目描述 给定nnn个区间,[li,ri][l_i,r_i][li​,ri​],可以选出其中一些区间,设选出tottottot个,令xxx表示这tottottot个区间交的长度.求min{x,tot}min\{x,tot\}min{x,tot}n≤105,1≤xi≤yi≤nn \le 10^5,1 \le x_i \le y_i…

【DP】收银员

收银员 题目大意: 有n件物品,每件物品有他的扫描时间和价格,在扫描的时候可以偷物品(一个单位时间偷一件),问最少给多少钱 原题: 解题思路: 设f[j]为偷或买共j件花的最少钱&…

P5020-货币系统【背包】

正题 题目链接:https://www.luogu.com.cn/problem/P5020 题目大意 定义S(A)S(A)S(A)表示集合AAA内的若干个数字和(可以重复使用)可以表示的集合 nnn个数的集合FFF,求一个最小的集合G⊆FG\subseteq FG⊆F且S(F)S(G)S(F)S(G)S(F)S(G)。 解题思…

线段树-Chossing Ads-分治,主元素思想,神题

Choosing Ads 问题提出 给出长度为nnn的序列AAA,以及数ppp(20≤p≤10020\le p \le 10020≤p≤100)QQQ次操作,两种类型 (1,l,r)(1,l,r)(1,l,r),区间赋值为vvv(2,l,r)(2,l,r)(2,l,r),区间出现频率≥p%\ge p\%≥p%的数 n,Q≤105n,Q \le 10^5n,Q≤105 问题解答 非常巧妙的一道题…

P2679-子串【dp】

正题 题目链接:https://www.luogu.com.cn/problem/P2679 题目大意 长度为nnn的字符串AAA和长度为mmm的字符串BBB,要求从AAA中截取kkk个不重复的非空子串使得他们按顺序拼接起来是字符串BBB。求方案数。 解题思路 设fi,j,k,0/1f_{i,j,k,0/1}fi,j,k,0/1​表示AAA到…

【字符串】字符串

字符串 题目大意: 有一个字符串,问有子串“bear”的子串有多少个 原题: 题目描述 小熊有一个由小写英文字母组成的字符串s s1s2…sn。小熊想要计算s中有多少子串包含字符串“bear”,也就是找出满足字符串x(i, j) sisi1…sj …

.Net Core小技巧 - Swagger适配虚拟目录及二级目录

前言随着前后端分离模式与微服务架构的出现,Web API变得越来越重要及普遍。而后出现的网关技术,使开发者更倾向于使用二级/多级目录来暴露Web API,一是暴露的端口更少,方便管理;二是在网关中可以处理一些公共的事务&am…

线段树-Count on a Treap-神题

Count on a Treap 题目来源 Codechef Feb 2014 COT5 https://www.codechef.com/problems/COT5 问题提出 什么是Treap 是一颗二叉搜索树,每个节点拥有keykeykey属性.是一颗堆,每个节点拥有weightweightweight属性 问题 nnn次操作,三种类型,要求维护"大根Treap" …

P6834-[Cnoi2020]梦原【数学期望,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P6834?contestId34123 题目大意 nnn个点,每个点i(i≠1)i(i\neq 1)i(i​1)随机连接[i−k,i−1][i-k,i-1][i−k,i−1]中的一个点。对于每个点有一个权值aia_iai​。每次可以选择一个全部都是正权值的连通块里所有…

好代码是管出来的——使用Git来管理源代码

软件开发过程中一个重要的产出就是代码,软件的编码过程一般是由一个团队共同完成,它是一个并行活动,为了保证代码在多人开发中能够顺利完成,我们需要使用代码版本控制工具来对代码进行统一存储,并追踪每一份代码的历史…

【DP】序列

序列 题目大意: 定义“好序列”为满足每一个数是上一个数的倍数的序列,求一个长度为K的“好序列” 原题: 题目描述 一个长度为k的整数序列b1,b2,…,bk(1≤b1≤b2≤…≤bk≤N)称…

线段树-楼房重建-洛谷-P4198

楼房重建 题目大意 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房。每天,这片工地上的房子拆了又建、建了又拆。他经常无聊地看着窗外发呆,数自己能够看到多少栋房子。 为了简化问题,我们考虑这些事件发生在一个二维平面…

P6835-[Cnoi2020]线形生物【期望dp】

正题 题目链接:https://www.luogu.com.cn/problem/P6835?contestId34123 题目大意 n1n1n1个点,其中每个iii向i1i1i1连边(i≤n)(i\leq n)(i≤n),然后有mmm对(u,v)(u,v)(u,v)表示uuu向vvv连边u≥vu\geq vu≥v。开始在点111,每次随机走一个相连…

【DP】游戏

游戏 题目大意: 有一个图,第s秒在点p会出现c个怪物(过了这一秒就会消失),小明可以从任意一个点出发(从第一秒开始),有m条路径(无向),链接着两个…

定时调度系列之Quartz.Net详解

一. 背景我们在日常开发中,可能你会遇到这样的需求:"每个月的3号给用户发信息,提醒用户XXX "、"每天的0点需要统计前一天的考勤记录"、"每个月的1号计算上个月的库存情况"、"定时初始化数据供其它业务使用…

CF1419E-Decryption【数论,dfs】

正题 题目链接:https://www.luogu.com.cn/problem/CF1419E 题目大意 nnn的所有约数排成一个圈,求一个顺序使得相邻的互质的数最少。 解题思路 质因数分解后,我们考虑每个质因数之间填什么。对于两个质因数a,ba,ba,b。显然a∗ba*ba∗b也是nnn的约数&…

P4445 最长回文串

P4445 最长回文串 题目描述 顺序和逆序读起来完全一样的串叫做回文串。比如acbcaacbcaacbca是回文串,而abcabcabc不是(abc的顺序为abcabcabc,逆序为cbacbacba,不相同)。 输入长度为nnn的串SSS,求SSS的最…

RyuJIT的华丽转身

RyuJIT是作为.NET即时编译器的代号称谓,它是.NET运行时的基本组件之一。与此相反的是,Roslyn作为C#编译器,其编译C#代码成为IL字节码。然后,其再将IL字节码编译成相对于多种处理器的机器码。随着最近对dotnet/coreclr #18064的合并…

【树状数组】【dfs】树

树 题目大意: 有一棵树,当给一个点加上一个val时,他的儿子会减val,而他儿子的儿子会加上val(-(-val)val),有m条指令,要不输出某个点的值,要不给…

SP1811-Longest Common Substring【SAM】

正题 题目链接:https://www.luogu.com.cn/problem/SP1811 题目大意 求两个串的最长公共子串。 解题思路 对与第一个串首先构建一个SAMSAMSAM,然后考虑让第二个串在上面匹配。 对于枚举的每个位置要在SAMSAMSAM上找一个节点使得它的后缀是枚举到的位置的后缀。所…