摘要:《ASP.NET Core 3框架揭秘》于本月19日在下午京东正式开始预售,并在半天之内销售近一千套,随后迅速占据京东科技IT图书畅销榜榜首的位置。为期一周的限时五折优惠将在今天24时结束。有兴趣的朋友可以加入本书读者群购买。 阅读全文
posted @ 2020-03-20 12:22 Artech 阅读(11502) 评论(57) 推荐(25) 编辑
摘要:昨天有个朋友在微信上问我一个问题:他希望通过动态脚本的形式实现对ASP.NET Core MVC应用的扩展,比如在程序运行过程中上传一段C#脚本将其中定义的Controller类型注册到应用中,问我是否有好解决方案。这是一个挺有意思的问题,我们可以通过两种方案实现了这个需求。 阅读全文
posted @ 2020-04-07 09:29 Artech 阅读(4526) 评论(14) 推荐(32) 编辑
摘要:《ASP.NET Core 3框架揭秘》勘误表 阅读全文
posted @ 2020-04-04 18:37 Artech 阅读(3663) 评论(70) 推荐(12) 编辑
摘要:传统的.NET Framework提供的System.Diagnostics.PerformanceCounter类型可以帮助我们收集Windows操作系统下物理机或者进程的性能指标,基于PerformanceCounter类型的性能计数API在.NET Core下被彻底放弃。在.NET Core中的性能计数器具有新的玩法。 阅读全文
posted @ 2020-04-03 08:30 Artech 阅读(2906) 评论(6) 推荐(7) 编辑
摘要:《200行代码,7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有深刻的理解,知道了ASP.NET Core框架针对每个请求的处理流程。在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分析一下MVC框架。真实的MVC框架其实很复杂,所以我们依然按照类似的方式大刀阔斧地“砍掉”了很多“细枝末节”,利用一个Mini版本的模拟框架将真实ASP.NET Core MVC最核心的部分展示出来。和Mini版本的ASP.NET Core框架一样,这个Mini版的ASP.NET Core MVC框架同样采用真实框架一致的设计,并且是同样可以直接运行的。 阅读全文
posted @ 2020-04-01 08:27 Artech 阅读(4551) 评论(0) 推荐(10) 编辑
摘要:《200行代码,7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有了真实的了解。在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分析一下MVC框架的设计与实现原理,希望这篇文章能够满足你们的需求。 阅读全文
posted @ 2020-03-31 08:41 Artech 阅读(2054) 评论(2) 推荐(6) 编辑
摘要:ASP.NET Core提供了多种认证方式,它们的实现都基于相同的认证模型。本篇文章提供了一个极简的实例让读者体验如何在ASP.NET Core应用中实现认证、登录和注销 阅读全文
posted @ 2020-03-25 08:37 Artech 阅读(2694) 评论(2) 推荐(7) 编辑
摘要:ASP.NET Core框架中的很多核心对象都是通过依赖注入方式提供的,如用来对应用进行初始化的Startup对象、中间件对象,以及ASP.NET Core MVC应用中的Controller对象和View对象等,所以我们可以在定义它们的时候采用注入的形式来消费已经注册的服务。下面简单介绍几种服务注入的应用场景。 阅读全文
posted @ 2020-03-24 08:24 Artech 阅读(5310) 评论(6) 推荐(10) 编辑
摘要:《200行代码,7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有了真实的了解。在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分析一下MVC框架的设计与实现原理,希望这篇文章能够满足你们的需求。在对本章内容展开介绍之前,顺便作一下广告:《ASP.NET Core 3框架揭秘》已经开始销售,限时5折优惠还有最后3天,有兴趣的从这里入群购买。 阅读全文
posted @ 2020-03-23 08:27 Artech 阅读(1632) 评论(0) 推荐(3) 编辑
摘要:《200行代码,7个对象——让你了解ASP.NET Core框架的本质》让很多读者对ASP.NET Core管道有了真实的了解。在过去很长一段时间中,有很多人私信给我:能否按照相同的方式分析一下MVC框架的设计与实现原理,希望这篇文章能够满足你们的需求。在对本章内容展开介绍之前,顺便作一下广告:《ASP.NET Core 3框架揭秘》已经开始销售,现时5折优惠还有最后4天,有兴趣的从这里购买。 阅读全文
posted @ 2020-03-22 12:44 Artech 阅读(3795) 评论(5) 推荐(16) 编辑
摘要:《ASP.NET Core 3框架揭秘》于本月19日在下午京东正式开始预售,并在半天之内销售近一千套,随后迅速占据京东科技IT图书畅销榜榜首的位置。为期一周的限时五折优惠将在今天24时结束。有兴趣的朋友可以加入本书读者群购买。 阅读全文
posted @ 2020-03-20 12:22 Artech 阅读(11502) 评论(57) 推荐(25) 编辑
摘要:在过去一段时间内,写了一系列关于ASP.NET Core 3相关的文章,其中绝大部分来源于即将出版的《ASP.NET Core 3框架揭秘》,先将它们汇总在这里。如果对《ASP.NET Core 3框架揭秘》感兴趣,可以通过这里加入读者群。 阅读全文
posted @ 2020-03-16 08:13 Artech 阅读(11421) 评论(14) 推荐(41) 编辑
摘要:实际上HostBuilder对象并没有在实现的Build方法中调用构造函数来创建Host对象,该对象利用作为依赖注入容器的IServiceProvider对象创建的。为了可以采用依赖注入框架来提供构建的Host对象,HostBuilder必须完成前期的服务注册工作。总地来说,HostBuilder针对Host对象的构建大体可以划分为5个步骤。 阅读全文
posted @ 2020-03-12 08:24 Artech 阅读(945) 评论(4) 推荐(4) 编辑
摘要:2019年1月19日,微软技术(苏州)俱乐部成立,我受邀在成立大会上作了一个名为《ASP.NET Core框架揭秘》的分享。在此次分享中,我按照ASP.NET Core自身的运行原理和设计思想创建了一个 “迷你版” 的ASP.NET Core框架,并且利用这个 “极简” 的模拟框架阐述了ASP.NET Core框架最核心、最本质的东西。整个框架涉及到的核心代码不会超过200行,涉及到7个核心的对象。由于ASP.NET Core 3.X采用了不同的应用承载方式,所以我们将这个模拟框架升级到3.x版本。 阅读全文
posted @ 2020-03-09 08:16 Artech 阅读(7194) 评论(18) 推荐(56) 编辑
摘要:我们在《总体设计[上篇]》和《总体设计[下篇]》中通过对IHostedService、IHost和IHostBuider这三个接口的介绍让读者朋友们对服务承载模型有了大致的了解。接下来我们从抽象转向具体,看看承载系统针对该模型的实现是如何落地的。 阅读全文
posted @ 2020-03-08 12:34 Artech 阅读(2199) 评论(3) 推荐(9) 编辑
摘要:《ASP.NET Core 3框架揭秘》(上下册)在本月正式上市,为此出版社专门创建了一个微信群,。由于目前人数已经超过200人,只能通过邀请方能加入。有兴趣的朋友可以搜索微信账号“broadview002”(博文小丸子)并添加为好友,并在申请消息中指定本书书号“38462”,出版社工作人员将自动帮你添加到该微信群。 阅读全文
posted @ 2020-03-07 08:00 Artech 阅读(6343) 评论(54) 推荐(68) 编辑
摘要:前面的实例演示了服务承载的基本编程模式,接下来我们从设计的角度来重新认识服务承载模型。总的来说,服务承载模型主要由三个核心对象组成:多个通过IHostedService接口表示的服务被承载于通过IHost接口表示的宿主上,IHostBuilder接口表示IHost对象的构建者。 阅读全文
posted @ 2020-03-05 08:01 Artech 阅读(1306) 评论(6) 推荐(6) 编辑
摘要:前面的实例演示了服务承载的基本编程模式,接下来我们从设计的角度来重新认识服务承载模型。总的来说,服务承载模型主要由如下图所示的三个核心对象组成:多个通过IHostedService接口表示的服务被承载于通过IHost接口表示的宿主上,IHostBuilder接口表示IHost对象的构建者。 阅读全文
posted @ 2020-03-04 08:12 Artech 阅读(2752) 评论(3) 推荐(13) 编辑
摘要:借助.NET Core提供的承载(Hosting)系统,我们可以将任意一个或者多个长时间运行(Long-Running)的服务寄宿或者承载于托管进程中。ASP.NET Core应用仅仅是该承载系统的一种典型的服务类型而已,任何需要在后台长时间运行的操作都可以定义成标准化的服务并利用该系统来承载。 阅读全文
posted @ 2020-03-03 09:16 Artech 阅读(1395) 评论(2) 推荐(6) 编辑
摘要:借助.NET Core提供的承载(Hosting)系统,我们可以将任意一个或者多个长时间运行(Long-Running)的服务寄宿或者承载于托管进程中。ASP.NET Core应用仅仅是该承载系统的一种典型的服务类型而已,任何需要在后台长时间运行的操作都可以定义成标准化的服务并利用该系统来承载。 阅读全文
posted @ 2020-03-02 11:17 Artech 阅读(2563) 评论(7) 推荐(12) 编辑
摘要:Options模型本身与配置系统完全没有关系,但是配置在大部分情况下会作为绑定Options对象的数据源,所以有必要将两者结合在一起。与《扩展与定制》演示的两个例子一样,针对配置系统的集成同样是通过定制Options模型相应的对象来实现的 阅读全文
posted @ 2020-01-20 08:36 Artech 阅读(2109) 评论(10) 推荐(6) 编辑
摘要:由于Options模型涉及的核心对象最终都注册为相应的服务,所以从原则上讲这些对象都是可以定制的,下面提供几个这样的实例。由于Options模型提供了针对配置系统的集成,所以可以采用配置文件的形式来提供原始的Options数据,可以直接采用反序列化的方式将配置文件的内容转换成Options对象。 阅读全文
posted @ 2020-01-19 08:36 Artech 阅读(2644) 评论(8) 推荐(12) 编辑
摘要:《Options模型》介绍了组成Options模型的4个核心对象以及它们之间的交互关系,读者对如何得到Options对象的实现原理可能不太了解,本篇文章主要介绍依赖注入的相关内容。既然我们能够利用IServiceProvider对象提供的IOptions 阅读全文
posted @ 2020-01-16 08:09 Artech 阅读(2290) 评论(11) 推荐(11) 编辑
摘要:IOptionsFactory解决了Options的创建与初始化问题,但由于它自身是无状态的,所以Options模型对Options对象实施缓存可以获得更好的性能。Options模型中针对Options对象的缓存由IOptionsMonitorCache对象来完成。Options模型之所以将表示缓存的接口命名为IOptionsMonitorCache,是因为缓存最初是为IOptionsMonitor对象服务的,该对象旨在实现针对承载Options对象的原始数据源的监控,并在检测到数据更新后及时替换缓存的Options对象。 阅读全文
posted @ 2020-01-14 08:38 Artech 阅读(1436) 评论(16) 推荐(13) 编辑
摘要:通过前面演示的几个实例(配置选项的正确使用方式[上篇]、配置选项的正确使用方式[下篇]),我们已经对基于Options的编程方式有了一定程度的了解,下面从设计的角度介绍Options模型。我们演示的实例已经涉及Options模型的3个重要的接口,它们分别是IOptions 阅读全文
posted @ 2020-01-13 08:51 Artech 阅读(1543) 评论(4) 推荐(8) 编辑
摘要:依赖注入不仅是支撑整个ASP.NET Core框架的基石,也是开发ASP.NET Core应用采用的基本编程模式,所以依赖注入十分重要。依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中。除了采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对象。 阅读全文
posted @ 2020-01-10 08:55 Artech 阅读(3435) 评论(6) 推荐(35) 编辑
摘要:依赖注入不仅是支撑整个ASP.NET Core框架的基石,也是开发ASP.NET Core应用采用的基本编程模式,所以依赖注入十分重要。依赖注入使我们可以将依赖的功能定义成服务,最终以一种松耦合的形式注入消费该功能的组件或者服务中。除了采用依赖注入的形式消费承载某种功能的服务,还可以采用相同的方式消费承载配置数据的Options对象。 阅读全文
posted @ 2020-01-09 08:57 Artech 阅读(3027) 评论(9) 推荐(15) 编辑
摘要:我们在前面对配置模型中默认提供的各种IConfigurationSource实现类型进行了深入详尽的介绍,如果它们依然不能满足项目中的需求,我们还可以通过自定义IConfigurationSource实现类型来支持我们希望的配置源。就配置数据的持久化方式来说,将配置存储在数据库中应该是一种常见的方式。接下来我们会创建一个针对数据库的IConfigurationSource实现类型,它采用Entity Framework Core来完成数据库的存取操作。 阅读全文
posted @ 2019-12-24 08:49 Artech 阅读(2071) 评论(6) 推荐(11) 编辑
摘要:XML也是一种常用的配置定义形式,它对数据的表达能力甚至强于JSON,几乎所有类型的数据结构都可以通过XML表示出来。当我们通过一个XML元素表示一个复杂对象的时候,对象的数据成员定义成当前XML元素的子元素。虽然XML对数据结构的表达能力总体要强于JSON,但是作为配置模型的数据来源却有自己的局限性,比如它们对集合的表现形式有点不尽如人意。 阅读全文
posted @ 2019-12-23 08:53 Artech 阅读(1034) 评论(6) 推荐(8) 编辑
摘要:物理文件是我们最常用到的原始配置载体,而最佳的配置文件格式主要有三种,它们分别是JSON、XML和INI,对应的配置源类型分别是JsonConfigurationSource、XmlConfigurationSource和IniConfigurationSource,它们具有如下一个相同的基类FileConfigurationSource。 阅读全文
posted @ 2019-12-20 08:19 Artech 阅读(1152) 评论(4) 推荐(13) 编辑
摘要:.NET Core采用的这个全新的配置模型的一个主要的特点就是对多种不同配置源的支持。我们可以将内存变量、命令行参数、环境变量和物理文件作为原始配置数据的来源。如果采用物理文件作为配置源,我们可以选择不同的格式(比如XML、JSON和INI等)。如果这些默认支持的配置源形式还不能满足你的需求,我们还可以通过注册自定义IConfigurationSource的方式将其他形式数据作为配置来源。 阅读全文
posted @ 2019-12-19 08:42 Artech 阅读(1429) 评论(1) 推荐(10) 编辑
摘要:在《配置模型总体设计》介绍配置模型核心对象的时候,我们刻意回避了与配置同步相关的API,现在我们利用一个独立文章来专门讨论这个话题。配置的同步涉及到两个方面:第一,对原始的配置源实施监控并在其发生变化之后重新加载配置;第二,配置重新加载之后及时通知应用程序进而使应用能够及时使用最新的配置。 阅读全文
posted @ 2019-12-13 08:33 Artech 阅读(3677) 评论(16) 推荐(13) 编辑
摘要:虽然应用程序可以直接利用通过IConfigurationBuilder对象创建的IConfiguration对象来提取配置数据,但是我们更倾向于将其转换成一个POCO对象,以面向对象的方式来使用配置,我们将这个转换过程称为配置绑定。 阅读全文
posted @ 2019-12-12 08:29 Artech 阅读(1801) 评论(0) 推荐(7) 编辑
摘要:配置的编程模型涉及到三个核心对象,分别通过三个对应的接口(IConfiguration、IConfigurationSource和IConfigurationBuilder)来表示。如果从设计层面来审视背后的配置模型,还缺少另一个名通过IConfigurationProvider接口表示的核心对象。总的来说,配置模型由这四个核心对象组成 阅读全文
posted @ 2019-12-10 08:03 Artech 阅读(4112) 评论(14) 推荐(17) 编辑
摘要:提到“配置”二字,我想绝大部分.NET开发人员脑海中会立即浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义在这两个XML格式的文件之中。到了.NET Core的时代,很多我们习以为常的东西都发生了改变,其中就包括定义配置的方式。总的来说,新的配置系统显得更加轻量级,并且具有更好的扩展性,其最大的特点就是支持多样化的数据源。我们可以采用内存的变量作为配置的数据源,也可以将配置定义在持久化的文件甚至数据库中。在对配置系统进行系统介绍之前,我们先从编程的角度来体验一下全新的配置读取方式。 阅读全文
posted @ 2019-12-05 08:53 Artech 阅读(2496) 评论(9) 推荐(20) 编辑
摘要:提到“配置”二字,我想绝大部分.NET开发人员脑海中会立即浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义在这两个XML格式的文件之中。到了.NET Core的时代,很多我们习以为常的东西都发生了改变,其中就包括定义配置的方式。总的来说,新的配置系统显得更加轻量级,并且具有更好的扩展性,其最大的特点就是支持多样化的数据源。我们可以采用内存的变量作为配置的数据源,也可以将配置定义在持久化的文件甚至数据库中。在对配置系统进行系统介绍之前,我们先从编程的角度来体验一下全新的配置读取方式。 阅读全文
posted @ 2019-12-03 09:07 Artech 阅读(3554) 评论(8) 推荐(14) 编辑
摘要:标题反映的是上周五一个同事咨询我的问题,我觉得这是一个很好的问题。这个问题有助于我们深入理解依赖注入框架在ASP.NET Core中的应用,以及服务实例的生命周期。 阅读全文
posted @ 2019-12-02 08:52 Artech 阅读(5781) 评论(42) 推荐(51) 编辑
摘要:一个物理文件可以直接作为资源内嵌到编译生成的程序集中。借助于EmbeddedFileProvider,我们可以采用统一的编程方式来读取内嵌的资源文件,该类型定义在 “Microsoft.Extensions.FileProviders.Embedded”这个NuGet包中。在正式介绍EmbeddedFileProvider之前,我们必须知道如何将一个项目文件作为资源内嵌入到编译生成的程序集中。 阅读全文
posted @ 2019-11-25 08:34 Artech 阅读(3563) 评论(14) 推荐(23) 编辑
摘要:ASP.NET Core应用中使用得最多的还是具体的物理文件,比如配置文件、View文件以及作为Web资源的静态文件。物理文件系统由定义在NuGet包“Microsoft.Extensions.FileProviders.Physical”中的PhysicalFileProvider来构建。我们知道System.IO命名空间下定义了一整套针操作物理目录和文件的API,实际上PhysicalFileProvider最终也是通过调用这些API来完成相关的IO操作。 阅读全文
posted @ 2019-11-22 08:58 Artech 阅读(1565) 评论(8) 推荐(15) 编辑
摘要:在《抽象的“文件系统”》中,我们通过几个简单的实例演示从编程的角度对文件系统做了初步的体验,接下来我们继续从设计的角度来进一步认识它。这个抽象的文件系统以目录的形式来组织文件,我们可以利用它读取某个文件的内容,还可以对目录或者文件实施监控并及时得到变化的通知。 阅读全文
posted @ 2019-11-20 09:30 Artech 阅读(1790) 评论(5) 推荐(15) 编辑
摘要:ASP.NET Core应用 具有很多读取文件的场景,比如配置文件、静态Web资源文件(比如CSS、JavaScript和图片文件等)以及MVC应用的View文件,甚至是直接编译到程序集中的内嵌资源文件。这些文件的读取都需要使用到一个IFileProvider对象。IFileProvider对象构建了一个抽象的文件系统,我们不仅可以利用它提供的统一API来读取各种类型的文件,还能及时监控目标文件的变化。 阅读全文
posted @ 2019-11-19 09:00 Artech 阅读(5705) 评论(15) 推荐(30) 编辑