摘要:在《抽象的“文件系统”》中,我们通过几个简单的实例演示从编程的角度对文件系统做了初步的体验,接下来我们继续从设计的角度来进一步认识它。甘肃快三派奖最新这个抽象的文件系统以目录的形式来组织文件,我们可以利用它读取某个文件的内容,还可以对目录或者文件实施监控并及时得到变化的通知。 阅读全文
posted @ 2019-11-20 09:30 甘肃快三派奖最新—Artech 阅读 (469) 评论 (4) 编辑
摘要:ASP.NET Core应用 具有很多读取文件的场景,比如配置文件、静态Web资源文件(比如CSS、JavaScript和图片文件等)以及MVC应用的View文件,甚至是直接编译到程序集中的内嵌资源文件。这些文件的读取都需要使用到一个IFileProvider对象。IFileProvider对象构建了一个抽象的文件系统,我们不仅可以利用它提供的统一API来读取各种类型的文件,还能及时监控目标文件的变化。 阅读全文
posted @ 2019-11-19 09:00 甘肃快三派奖最新—Artech 阅读 (3012) 评论 (14) 编辑
摘要:.NET Core具有一个承载(Hosting)系统,承载需要在后台长时间运行的服务,一个ASP.NET Core应用仅仅是该系统承载的一种服务而已。承载系统总是采用依赖注入的方式来消费它在服务承载过程所需的服务。对于承载系统来说,原始的服务注册总是体现为一个IServiceCollection集合,最终的依赖注入容器则体现为一个IServiceProvider对象,如果要将第三方依赖注入框架整合进来,就需要利用它们解决从IServiceCollection集合到IServiceProvider对象之间的适配问题。 阅读全文
posted @ 2019-11-18 08:16 甘肃快三派奖最新—Artech 阅读 (426) 评论 (3) 编辑
摘要:《服务注册》、《服务消费》和《生命周期》主要从实现原理的角度对.NET Core的依赖注入框架进行了介绍,接下来更进一步,看看该框架的总体设计和实现。甘肃快三派奖最新在过去的多个版本更迭过程中,依赖注入框架的底层实现一直都在发生改变,加上底层的涉及的大都是内容接口和类型,所以我们不打算涉及太过细节的层面。 阅读全文
posted @ 2019-11-15 08:36 甘肃快三派奖最新—Artech 阅读 (527) 评论 (3) 编辑
摘要:生命周期决定了IServiceProvider对象采用怎样的方式提供和释放服务实例。虽然不同版本的依赖注入框架针对服务实例的生命周期管理采用了不同的实现,但总的来说原理还是类似的。在我们提供的依赖注入框架Cat中,我们已经模拟了三种生命周期模式的实现原理,接下来我们结合“服务范围”的概念来对这个话题做进一步讲述。 阅读全文
posted @ 2019-11-14 07:59 甘肃快三派奖最新—Artech 阅读 (531) 评论 (3) 编辑
摘要:包含服务注册信息的IServiceCollection集合最终被用来创建作为依赖注入容器的IServiceProvider对象。当需要消费某个服务实例的时候,我们只需要指定服务类型调用IServiceProvider的GetService方法即可,IServiceProvider对象就会根据对应的服务注册提供所需的服务实例。 阅读全文
posted @ 2019-11-13 08:16 甘肃快三派奖最新—Artech 阅读 (586) 评论 (6) 编辑
摘要:通过《利用容器提供服务》我们知道作为依赖注入容器的IServiceProvider对象是通过调用IServiceCollection接口的扩展方法BuildServiceProvider创建的,IServiceCollection对象是一个存放服务注册信息的集合。在《一个迷你版DI框架》中创建的Cat框架中的服务注册是通过类型ServiceRegistry表示的,在.NET Core依赖注入框架中,与之对应的类型是ServiceDescriptor。 阅读全文
posted @ 2019-11-12 08:20 甘肃快三派奖最新—Artech 阅读 (676) 评论 (4) 编辑
摘要:毫不夸张地说,整个ASP.NET Core框架是建立在依赖注入框架之上的。ASP.NET Core应用在启动时构建管道以及利用该管道处理每个请求过程中使用到的服务对象均来源于依赖注入容器。该依赖注入容器不仅为ASP.NET Core框架自身提供必要的服务,同时也是应用程序的服务提供者,依赖注入已经成为了ASP.NET Core应用的基本编程模式。 阅读全文
posted @ 2019-11-11 08:15 甘肃快三派奖最新—Artech 阅读 (2697) 评论 (13) 编辑
摘要:注册拦截器旨在解决如何将拦截器应用到目标方法的问题。在我看来,针对拦截器的注册应该是明确而精准的,也就是我们提供的注册方式应该让拦截器准确地应用到期望的目标方法上,不能多也不能少。Dora.Interception只提供两种严谨的拦截器注册方式,一种前面介绍的针对特性标注的方式,另一种就是本篇介绍的针对策略的方式。 阅读全文
posted @ 2019-10-28 07:33 甘肃快三派奖最新—Artech 阅读 (849) 评论 (2) 编辑
摘要:按照单一职责的原则,拦截器只负责需要的拦截操作的执行,至于它采用何种方式应用到目标方法上,以及它在整个拦截器管道中的位置则属于“拦截器注册”的范畴。甘肃快三派奖最新Dora.Interception提供了几种典型的注册方法,用户也可以根据自己的需求实现自己的注册方式。 阅读全文
posted @ 2019-10-24 08:29 甘肃快三派奖最新—Artech 阅读 (525) 评论 (1) 编辑
摘要:对于所有的AOP框架来说,多个拦截器最终会应用到某个方法上。这些拦截器按照指定的顺序构成一个管道,管道的另一端就是针对目标方法的调用。甘肃快三派奖最新从设计角度来将,拦截器和中间件本质是一样的,那么我们可以按照类似的模式来设计拦截器。 阅读全文
posted @ 2019-10-23 07:26 甘肃快三派奖最新—Artech 阅读 (528) 评论 (1) 编辑
摘要:和所有的AOP框架一样,我们必须将正常的方法调用进行拦截,才能将应用到当前方法上的所有拦截器纳入当前调用链。Dora.Interception采用IL Eimit的方式实现对方法调用的拦截,接下来我们就来聊聊大致的实现原理。 阅读全文
posted @ 2019-10-22 07:57 甘肃快三派奖最新—Artech 阅读 (689) 评论 (2) 编辑
摘要:在前面的章节中,我们从纯理论的角度对依赖注入进行了深入论述,我们接下来会对.NET Core依赖注入框架进行单独介绍。为了让读者朋友能够更好地理解.NET Core依赖注入框架的设计与实现,我们按照类似的原理创建了一个简易版本的依赖注入框架,也就是我们在前面多次提及的Cat。 阅读全文
posted @ 2019-10-21 08:30 甘肃快三派奖最新—Artech 阅读 (2004) 评论 (17) 编辑
摘要:IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架之中以实现对流程的复用,并按照“好莱坞法则”实现应用程序的代码与框架之间的交互。我们可以采用若干设计模式以不同的方式实现IoC,比如我们在前面介绍的模板方法、工厂方法和抽象工厂,接下来我们介绍一种更有价值的IoC模式:依赖注入(DI:Dependency Injection)。 阅读全文
posted @ 2019-10-18 07:13 甘肃快三派奖最新—Artech 阅读 (1246) 评论 (5) 编辑
摘要:正如我们在《依赖注入:控制反转》提到过的,很多人将IoC理解为一种“面向对象的设计模式”,实际上IoC不仅与面向对象没有必然的联系,它自身甚至算不上是一种设计模式。一般来讲,设计模式提供了一种解决某种具体问题的方案,但是IoC既没有一个针对性的问题领域,其自身也没有提供一种可操作性的解决方案,所以我们更加倾向于将IoC视为一种设计原则。很多我们熟悉的设计模式背后都采用了IoC原则,接下来我们就来介绍几种典型的“设计模式”。 阅读全文
posted @ 2019-10-17 05:41 甘肃快三派奖最新—Artech 阅读 (2677) 评论 (19) 编辑
摘要:ASP.NET Core框架建立在一些核心的基础框架之上,这些基础框架包括依赖注入、文件系统、配置选项和诊断日志等。这些框架不仅仅是支撑ASP.NET Core框架的基础,我们在进行应用开发的时候同样会频繁地使用到它们。对于这里提到的这几个基础框架,依赖注入尤为重要。 阅读全文
posted @ 2019-10-16 07:30 甘肃快三派奖最新—Artech 阅读 (2837) 评论 (12) 编辑
摘要:Docker是dotCloud公司开源的一款产品,从其诞生那一刻算起,在短短两三年时间里就成为了开源社区最火爆的项目。对于完全拥抱开源的.NET Core来说,它自然应该对Docker提供完美的支持。 阅读全文
posted @ 2019-10-14 08:27 甘肃快三派奖最新—Artech 阅读 (3445) 评论 (23) 编辑
摘要:如果想体验Linux环境下开发.NET Core应用,我们有多种选择。一种就是在一台物理机上安装原生的Linux,也可以采用虚拟机的形式安装相应的Linux Distribution。对于X64 Windows 10的用户来说,我们有了第三种更为方便快捷的选择,那就是使用Windows 10提供的Linux子系统。 阅读全文
posted @ 2019-10-13 08:17 甘肃快三派奖最新—Artech 阅读 (1156) 评论 (7) 编辑
摘要:除了微软自家的Windows平台, .NET Core针对Mac OS以及各种Linux Distribution(RHEL、Ubuntu、Debian、Fedora、CentOS和SUSE等)都提供了很好的支持。我们先来体验一下使用Mac来开发.NET Core应用, 阅读全文
posted @ 2019-10-12 08:46 甘肃快三派奖最新—Artech 阅读 (2287) 评论 (3) 编辑
摘要:由于ASP.NET Core框架在本质上就是由服务器和中间件构建的消息处理管道,所以在它上面构建的应用开发框架都是建立在某种类型的中间件上,整个ASP.NET Core MVC开发框架就是建立在用来实现路由的EndpointRoutingMiddleware和EndpointMiddleware中间件上。ASP.NET Core MVC利用路由系统为它分发请求,并在此基础上实现针对目标Controller的激活、Action方法的选择和执行,以及最终对于执行结果的响应。在介绍的实例演示中,我们将对上面创建的ASP.NET Core作进一步改造,使之转变成一个MVC应用。 阅读全文
posted @ 2019-10-11 08:18 甘肃快三派奖最新—Artech 阅读 (1742) 评论 (9) 编辑
摘要:我们在《上篇》利用dotnet new命令创建了一个简单的控制台程序,接下来我们将它改造成一个ASP.NET Core应用。一个ASP.NET Core应用构建在ASP.NET Core框架之上,ASP.NET Core框架利用一个消息处理管道完成对HTTP请求的监听、接收、处理和最终的响应。ASP.NET Core管道由一个服务器(Server)和若干中间件(Middleware)构成,当宿主(Host)程序启动之后,管道被构建出来,作为管道“龙头”的服务器开始监听来自客户端的HTTP请求。 阅读全文
posted @ 2019-10-10 07:15 甘肃快三派奖最新—Artech 阅读 (3459) 评论 (12) 编辑
摘要:.NET Core带来了全新的开发体验,但开发方式的差异根本不足以成为你快速跨入.NET Core 世界的门槛,因为在.NET Core在很多方面比传统的.NET Framework应用开发要简单。为了消除很多尚未接触过.NET Core的读者对未知世界的恐惧,我们先通过几个简单的Hello World应用让大家感受一下在Windows上的.NET Core全新的开发体验。 阅读全文
posted @ 2019-10-09 08:07 甘肃快三派奖最新—Artech 阅读 (6155) 评论 (17) 编辑
摘要:.NET Core正式发布之后,我为.NET Core度身定制的AOP框架Dora.Interception也升级到3.0。这个版本除了升级底层类库(.NET Standard 2.1)之外,我还对它进行大范围的重构甚至重新设计。这次重构大部分是在做减法,其目的在于使设计和使用更加简单和灵活,接下来我们就来体验一下在一个ASP.NET Core应用程序下如何使用Dora.Interception。 阅读全文
posted @ 2019-10-08 08:41 甘肃快三派奖最新—Artech 阅读 (2275) 评论 (25) 编辑
摘要:HttpClient在Web调用中具有广泛的应用,而为它添加默认请求头是我们经常遇到的需求,本文介绍4种为HttpClient添加默认请求头的方式。 阅读全文
posted @ 2019-09-03 21:38 甘肃快三派奖最新—Artech 阅读 (2611) 评论 (20) 编辑
摘要:我们知道通过C#编写的.NET程序在编译后会转化成IL Code,在运行时以及时编译的方式转化成机器指令。如果想“篡改”某个方法的实现,要么在JIT之前改变IL代码,要么直接修改最终的机器指令。本文采用第二种解决方案,基本的思路就是将将原方法的机器指令修改为JUMP(对应x86二进制为0xE9)指令实现向目标方法的跳转。 阅读全文
posted @ 2019-08-14 20:43 甘肃快三派奖最新—Artech 阅读 (3047) 评论 (17) 编辑
摘要:《三体》让我们了解了什么是“降维打击”,在软件设计领域很多时候需要反其道而行。对于某个问题,如果不能有效的解决,可以考虑是否可以上升一个维度,从高维视角审视问题往往可以找到捷径。软件设计是抽象的艺术,“升维打击”实际上就是“维度”层面的抽象罢了。 阅读全文
posted @ 2019-06-17 06:51 甘肃快三派奖最新—Artech 阅读 (7648) 评论 (32) 编辑
摘要:2019年1月19日,微软技术(苏州)俱乐部成立,我受邀在成立大会上作了一个名为《ASP.NET Core框架揭秘》的分享。在此次分享中,我按照ASP.NET Core自身的运行原理和设计思想创建了一个 “迷你版” 的ASP.NET Core框架,并且利用这个 “极简” 的模拟框架阐述了ASP.NET Core框架最核心、最本质的东西。整个框架涉及到的核心代码不会超过200行,涉及到7个核心的对象。 阅读全文
posted @ 2019-01-28 08:09 甘肃快三派奖最新—Artech 阅读 (27760) 评论 (124) 编辑
摘要:这里所谓的与第三方AOP框架的整合不是说改变Dora.Interception现有的编程,而是恰好相反,即在不改变现有编程模式下采用第三方AOP框架或者自行实现的拦截机制。虽然我们默认提供基于IL Emit实现方式,并且对IL指令进行了深度的优化,但是如果我们真的具有更好的选择,我们可以通过简单的扩展完成对底层拦截机制改变 阅读全文
posted @ 2018-11-27 07:21 甘肃快三派奖最新—Artech 阅读 (2694) 评论 (4) 编辑
摘要:对于.NET Core程序开发来说,依赖注入已经成为无处不在并且“深入骨髓”的东西,不论是在进行业务应用的开发,还是进行基础组件的开发,依赖注入是实现“松耦合”最为理想的方式(没有之一),所以Dora.Interception必须将两者无缝地集成在一起。 阅读全文
posted @ 2018-11-24 08:08 甘肃快三派奖最新—Artech 阅读 (1402) 评论 (2) 编辑
摘要:在《以约定的方式定义拦截器》中,我们通过对拦截器的介绍了Dora.Interception的两种拦截机制,即针对接口的“实例拦截”针对虚方法的“类型拦截”。我们介绍了拦截器的本质以及基于约定的拦截器定义方式,接下来我们将着重关注拦截器的应用问题。 阅读全文
posted @ 2018-11-22 23:49 甘肃快三派奖最新—Artech 阅读 (1299) 评论 (5) 编辑
摘要:上一篇《更加简练的编程体验》提供了最新版本的Dora.Interception代码的AOP编程体验,接下来我们会这AOP框架的编程模式进行详细介绍,本篇文章着重关注的是拦截器的定义。采用“基于约定”的Interceptor定义方式是Dora.Interception区别于其他AOP框架的一个显著特征,要了解拦截器的编程约定,就得先来了解一下Dora.Interception中针对方法调用的拦截是如何实现的。 阅读全文
posted @ 2018-11-21 22:07 甘肃快三派奖最新—Artech 阅读 (1347) 评论 (3) 编辑
摘要:很久之前开发了一个名为Dora.Interception的开源AOP框架,最近对它作了一些改进。这个新版本对拦截器的定义和应用提供了更加简单的定义方式,同时对扩展性方法作了较大的改进,接下来我们通过一个简单实例来体验一下。 阅读全文
posted @ 2018-11-20 23:57 甘肃快三派奖最新—Artech 阅读 (3496) 评论 (6) 编辑
摘要:TechEmpower在10月30发布最新一轮(Round 17)针对“Web Framework Benchmarks”的性能测试报告,ASP.NET Core依旧表现不俗,在一些指标上甚至是碾压其他主流Web框架。为此我们做了一个简单的统计,看看ASP.NET Core和其他我们熟悉的Web框架,比如Servlet、Go、NodeJS和PHP之间的差距。 阅读全文
posted @ 2018-11-02 09:47 甘肃快三派奖最新—Artech 阅读 (4240) 评论 (10) 编辑
摘要:之前一段时间都在个人公众号账号“大内老A”发布关于ASP.NET Core的系列文章,很多人留言希望能够同步到这里,所以在这里 对这些文章做一个汇总,以便于PC端阅读。如果说微软官方文档主要关于ASP.NET Core的编程模式的话,我这个系列则主要关注整个ASP.NET Core的设计思想和实现原理。我希望这个系列为致力于深入学习ASP.NET Core的人提供一个全面、系统而深入的知识库。为了确保本系列的纯粹性,这个系列旨在关注ASP.NET Core以中间件管道核心的框架,不会涉及建立在它之上的编程模型(比如ASP.NET Core MVC)。 阅读全文
posted @ 2018-10-15 06:52 甘肃快三派奖最新—Artech 阅读 (26373) 评论 (53) 编辑
摘要:包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IServiceProvider对象。当需要消费某个服务实例的时候,我们只需要指定服务类型调用IServiceProvider的GetService方法,IServiceProvider就会根据对应的服务注册提供所需的服务实例。 阅读全文
posted @ 2018-08-03 06:10 甘肃快三派奖最新—Artech 阅读 (4098) 评论 (7) 编辑
摘要:包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IServiceProvider对象。服务注册就是创建出现相应的ServiceDescriptor对象并将其添加到指定IServiceCollection集合对象中的过程。 阅读全文
posted @ 2018-08-02 06:02 甘肃快三派奖最新—Artech 阅读 (2992) 评论 (6) 编辑
摘要:毫不夸张地说,整个ASP.NET Core框架是建立在一个依赖注入框架之上的,它在应用启动时构建请求处理管道过程中,以及利用该管道处理每个请求过程中使用到的服务对象均来源于DI容器。该DI容器不仅为ASP.NET Core框架提供必要的服务,同时作为了应用的服务提供者,依赖注入已经成为了ASP.NET Core应用基本的编程模式。 阅读全文
posted @ 2018-08-01 06:18 甘肃快三派奖最新—Artech 阅读 (6716) 评论 (15) 编辑
摘要:名为Cat的DI框架。在《依赖注入[4]: 创建一个简易版的DI框架[上篇]》中我们介绍了Cat的基本编程模式,接下来我们就来聊聊Cat的设计和实现。 阅读全文
posted @ 2018-07-31 07:29 甘肃快三派奖最新—Artech 阅读 (2189) 评论 (8) 编辑
摘要:本系列文章旨在剖析.NET Core的依赖注入框架的实现原理,到目前为止我们通过三篇文章(《控制反转》、《基于IoC的设计模式》和《 依赖注入模式》)从纯理论的角度对依赖注入进行了深入论述,为了让读者朋友能够更好地理解.NET Core的依赖注入框架的设计思想和实现原理,我们创建了一个简易版本的DI框架,也就是我们在前面文章中多次提及的Cat。我们会上下两篇来介绍这个被称为为Cat的DI框架。 阅读全文
posted @ 2018-07-30 06:34 甘肃快三派奖最新—Artech 阅读 (3514) 评论 (10) 编辑
摘要:IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架中以实现对流程的复用,并按照“好莱坞法则”实现应用程序的代码与框架之间的交互。我们可以采用若干设计模式以不同的方式实现IoC,比如我们在《依赖注入[2]: 基于IoC的设计模式》介绍的模板方法、工厂方法和抽象工厂,接下来我们介绍一种更为有价值的IoC模式,即依赖注入(DI:Dependency Injection,以下简称DI)。 阅读全文
posted @ 2018-07-27 06:26 甘肃快三派奖最新—Artech 阅读 (4300) 评论 (7) 编辑