摘要:在《配置模型总体设计》介绍配置模型核心对象的时候,365bet体育在线们刻意回避了与配置同步相关的API,现在365bet体育在线们利用一个独立文章来专门讨论这个话题。配置的同步涉及到两个方面:第一,对原始的配置源实施监控并在其发生变化之后重新加载配置;第二,配置重新加载之后及时通知应用程序进而使应用能够及时使用最新的配置。 阅读全文
posted @ 2019-12-13 08:33 Artech 阅读 (455) 评论 (2) 编辑
摘要:虽然应用程序可以直接利用通过IConfigurationBuilder对象创建的IConfiguration对象来提取配置数据,但是365bet体育在线们更倾向于将其转换成一个POCO对象,以面向对象的方式来使用配置,365bet体育在线们将这个转换过程称为配置绑定。 阅读全文
posted @ 2019-12-12 08:29 Artech 阅读 (443) 评论 (0) 编辑
摘要:配置的编程模型涉及到三个核心对象,分别通过三个对应的接口(IConfiguration、IConfigurationSource和IConfigurationBuilder)来365体育投注。如果从设计层面来审视背后的配置模型,还缺少另一个名通过IConfigurationProvider接口365体育投注的核心对象。总的来说,配置模型由这四个核心对象组成 阅读全文
posted @ 2019-12-10 08:03 Artech 阅读 (2280) 评论 (11) 编辑
摘要:提到“配置”二字,365bet体育在线想绝大部分.NET开发人员脑海中会立即浮现出两个特殊文件的身影,那就是365bet体育在线们再熟悉不过的app.config和web.config,多年以来365bet体育在线们已经习惯了将结构化的配置定义在这两个XML格式的文件之中。到了.NET Core的时代,很多365bet体育在线们习以为常的东西都发生了改变,其中就包括定义配置的方式。总的来说,新的配置系统显得更加轻量级,并且具有更好的扩展性,其最大的特点就是支持多样化的数据源。365bet体育在线们可以采用内存的变量作为配置的数据源,也可以将配置定义在持久化的文件甚至数据库中。在对配置系统进行系统介绍之前,365bet体育在线们先从编程的角度来体验一下全新的配置读取方式。 阅读全文
posted @ 2019-12-05 08:53 Artech 阅读 (805) 评论 (6) 编辑
摘要:提到“配置”二字,365bet体育在线想绝大部分.NET开发人员脑海中会立即浮现出两个特殊文件的身影,那就是365bet体育在线们再熟悉不过的app.config和web.config,多年以来365bet体育在线们已经习惯了将结构化的配置定义在这两个XML格式的文件之中。到了.NET Core的时代,很多365bet体育在线们习以为常的东西都发生了改变,其中就包括定义配置的方式。总的来说,新的配置系统显得更加轻量级,并且具有更好的扩展性,其最大的特点就是支持多样化的数据源。365bet体育在线们可以采用内存的变量作为配置的数据源,也可以将配置定义在持久化的文件甚至数据库中。在对配置系统进行系统介绍之前,365bet体育在线们先从编程的角度来体验一下全新的配置读取方式。 阅读全文
posted @ 2019-12-03 09:07 Artech 阅读 (1280) 评论 (6) 编辑
摘要:标题反映的是上周五一个同事咨询365bet体育在线的问题,365bet体育在线觉得这是一个很好的问题。这个问题有助于365bet体育在线们深入理解依赖注入框架在ASP.NET Core中的应用,以及服务实例的生命周期。 阅读全文
posted @ 2019-12-02 08:52 Artech 阅读 (3689) 评论 (39) 编辑
摘要:一个物理文件可以直接作为资源内嵌到编译生成的程序集中。借助于EmbeddedFileProvider,365bet体育在线们可以采用统一的编程方式来读取内嵌的资源文件,该类型定义在 “Microsoft.Extensions.FileProviders.Embedded”这个NuGet包中。在正式介绍EmbeddedFileProvider之前,365bet体育在线们必须知道如何将一个项目文件作为资源内嵌入到编译生成的程序集中。 阅读全文
posted @ 2019-11-25 08:34 Artech 阅读 (2670) 评论 (13) 编辑
摘要:ASP.NET Core应用中使用得最多的还是具体的物理文件,比如配置文件、View文件以及作为Web资源的静态文件。物理文件系统由定义在NuGet包“Microsoft.Extensions.FileProviders.Physical”中的PhysicalFileProvider来构建。365bet体育在线们知道System.IO命名空间下定义了一整套针操作物理目录和文件的API,实际上PhysicalFileProvider最终也是通过调用这些API来完成相关的IO操作。 阅读全文
posted @ 2019-11-22 08:58 Artech 阅读 (773) 评论 (7) 编辑
摘要:在《抽象的“文件系统”》中,365bet体育在线们通过几个简单的实例演示从编程的角度对文件系统做了初步的体验,接下来365bet体育在线们继续从设计的角度来进一步认识它。这个抽象的文件系统以目录的形式来组织文件,365bet体育在线们可以利用它读取某个文件的内容,还可以对目录或者文件实施监控并及时得到变化的通知。 阅读全文
posted @ 2019-11-20 09:30 Artech 阅读 (786) 评论 (4) 编辑
摘要:ASP.NET Core应用 具有很多读取文件的场景,比如配置文件、静态Web资源文件(比如CSS、JavaScript和图片文件等)以及MVC应用的View文件,甚至是直接编译到程序集中的内嵌资源文件。这些文件的读取都需要使用到一个IFileProvider对象。IFileProvider对象构建了一个抽象的文件系统,365bet体育在线们不仅可以利用它提供的统一API来读取各种类型的文件,还能及时监控目标文件的变化。 阅读全文
posted @ 2019-11-19 09:00 Artech 阅读 (3969) 评论 (14) 编辑
摘要:.NET Core具有一个承载(Hosting)系统,承载需要在后台长时间运行的服务,一个ASP.NET Core应用仅仅是该系统承载的365体育投注服务而已。承载系统总是采用依赖注入的方式来消费它在服务承载过程所需的服务。对于承载系统来说,原始的服务注册总是体现为一个IServiceCollection集合,最终的依赖注入容器则体现为一个IServiceProvider对象,如果要将第三方依赖注入框架整合进来,就需要利用它们解决从IServiceCollection集合到IServiceProvider对象之间的适配问题。 阅读全文
posted @ 2019-11-18 08:16 Artech 阅读 (654) 评论 (3) 编辑
摘要:《服务注册》、《服务消费》和《生命周期》主要从实现原理的角度对.NET Core的依赖注入框架进行了介绍,接下来更进一步,看看该框架的总体设计和实现。在过去的多个版本更迭过程中,依赖注入框架的底层实现一直都在发生改变,加上底层的涉及的大都是内容接口和类型,365bet体育在线365bet体育在线们不打算涉及太过细节的层面。 阅读全文
posted @ 2019-11-15 08:36 Artech 阅读 (690) 评论 (3) 编辑
摘要:生命周期决定了IServiceProvider对象采用怎样的方式提供和释放服务实例。虽然不同版本的依赖注入框架针对服务实例的生命周期管理采用了不同的实现,但总的来说原理还是类似的。在365bet体育在线们提供的依赖注入框架Cat中,365bet体育在线们已经模拟了三种生命周期模式的实现原理,接下来365bet体育在线们结合“服务范围”的概念来对这个话题做进一步讲述。 阅读全文
posted @ 2019-11-14 07:59 Artech 阅读 (803) 评论 (10) 编辑
摘要:包含服务注册信息的IServiceCollection集合最终被用来创建作为依赖注入容器的IServiceProvider对象。当需要消费某个服务实例的时候,365bet体育在线们只需要指定服务类型调用IServiceProvider的GetService方法即可,IServiceProvider对象就会根据对应的服务注册提供所需的服务实例。 阅读全文
posted @ 2019-11-13 08:16 Artech 阅读 (723) 评论 (6) 编辑
摘要:通过《利用容器提供服务》365bet体育在线们知道作为依赖注入容器的IServiceProvider对象是通过调用IServiceCollection接口的扩展方法BuildServiceProvider创建的,IServiceCollection对象是一个存放服务注册信息的集合。在《一个迷你版DI框架》中创建的Cat框架中的服务注册是通过类型ServiceRegistry365体育投注的,在.NET Core依赖注入框架中,与之对应的类型是ServiceDescriptor。 阅读全文
posted @ 2019-11-12 08:20 Artech 阅读 (843) 评论 (4) 编辑
摘要:毫不夸张地说,整个ASP.NET Core框架是建立在依赖注入框架之上的。ASP.NET Core应用在启动时构建管道以及利用该管道处理365体育投注请求过程中使用到的服务对象均来源于依赖注入容器。该依赖注入容器不仅为ASP.NET Core框架自身提供必要的服务,同时也是应用程序的服务提供者,依赖注入已经成为了ASP.NET Core应用的基本编程模式。 阅读全文
posted @ 2019-11-11 08:15 Artech 阅读 (3068) 评论 (16) 编辑
摘要:注册拦截器旨在解决如何将拦截器应用到目标方法的问题。在365bet体育在线看来,针对拦截器的注册应该是明确而精准的,也就是365bet体育在线们提供的注册方式应该让拦截器准确地应用到期望的目标方法上,不能多也不能少。Dora.Interception只提供两种严谨的拦截器注册方式,365体育投注前面介绍的针对特性标注的方式,另365体育投注就是本篇介绍的针对策略的方式。 阅读全文
posted @ 2019-10-28 07:33 Artech 阅读 (1077) 评论 (2) 编辑
摘要:按照单一职责的原则,拦截器只负责需要的拦截操作的执行,至于它采用何种方式应用到目标方法上,以及它在整个拦截器管道中的位置则属于“拦截器注册”的范畴。Dora.Interception提供了几种典型的注册方法,用户也可以根据自己的需求实现自己的注册方式。 阅读全文
posted @ 2019-10-24 08:29 Artech 阅读 (742) 评论 (1) 编辑
摘要:对于所有的AOP框架来说,多个拦截器最终会应用到某个方法上。这些拦截器按照指定的顺序构成一个管道,管道的另一端就是针对目标方法的调用。从设计角度来将,拦截器和中间件本质是一样的,那么365bet体育在线们可以按照类似的模式来设计拦截器。 阅读全文
posted @ 2019-10-23 07:26 Artech 阅读 (596) 评论 (1) 编辑
摘要:和所有的AOP框架一样,365bet体育在线们必须将正常的方法调用进行拦截,才能将应用到当前方法上的所有拦截器纳入当前调用链。Dora.Interception采用IL Eimit的方式实现对方法调用的拦截,接下来365bet体育在线们就来聊聊大致的实现原理。 阅读全文
posted @ 2019-10-22 07:57 Artech 阅读 (767) 评论 (3) 编辑
摘要:在前面的章节中,365bet体育在线们从纯理论的角度对依赖注入进行了深入论述,365bet体育在线们接下来会对.NET Core依赖注入框架进行单独介绍。为了让读者朋友能够更好地理解.NET Core依赖注入框架的设计与实现,365bet体育在线们按照类似的原理创建了一个简易版本的依赖注入框架,也就是365bet体育在线们在前面多次提及的Cat。 阅读全文
posted @ 2019-10-21 08:30 Artech 阅读 (2328) 评论 (17) 编辑
摘要:IoC主要体现了这样365体育投注设计思想:通过将一组通用流程的控制权从应用转移到框架之中以实现对流程的复用,并按照“好莱坞法则”实现应用程序的代码与框架之间的交互。365bet体育在线们可以采用若干设计模式以不同的方式实现IoC,比如365bet体育在线们在前面介绍的模板方法、工厂方法和抽象工厂,接下来365bet体育在线们介绍365体育投注更有价值的IoC模式:依赖注入(DI:Dependency Injection)。 阅读全文
posted @ 2019-10-18 07:13 Artech 阅读 (1586) 评论 (6) 编辑
摘要:正如365bet体育在线们在《依赖注入:控制反转》提到过的,很多人将IoC理解为365体育投注“面向对象的设计模式”,实际上IoC不仅与面向对象没有必然的联系,它自身甚至算不上是365体育投注设计模式。一般来讲,设计模式提供了365体育投注解决某种具体问题的方案,但是IoC既没有一个针对性的问题领域,其自身也没有提供365体育投注可操作性的解决方案,365bet体育在线365bet体育在线们更加倾向于将IoC视为365体育投注设计原则。很多365bet体育在线们熟悉的设计模式背后都采用了IoC原则,接下来365bet体育在线们就来介绍几种典型的“设计模式”。 阅读全文
posted @ 2019-10-17 05:41 Artech 阅读 (3057) 评论 (19) 编辑
摘要:ASP.NET Core框架建立在一些核心的基础框架之上,这些基础框架包括依赖注入、文件系统、配置选项和诊断日志等。这些框架不仅仅是支撑ASP.NET Core框架的基础,365bet体育在线们在进行应用开发的时候同样会频繁地使用到它们。对于这里提到的这几个基础框架,依赖注入尤为重要。 阅读全文
posted @ 2019-10-16 07:30 Artech 阅读 (3366) 评论 (12) 编辑
摘要:Docker是dotCloud公司开源的一款产品,从其诞生那一刻算起,在短短两三年时间里就成为了开源社区最火爆的项目。对于完全拥抱开源的.NET Core来说,它自然应该对Docker提供完美的支持。 阅读全文
posted @ 2019-10-14 08:27 Artech 阅读 (3782) 评论 (23) 编辑
摘要:如果想体验Linux环境下开发.NET Core应用,365bet体育在线们有多种选择。365体育投注就是在一台物理机上安装原生的Linux,也可以采用虚拟机的形式安装相应的Linux Distribution。对于X64 Windows 10的用户来说,365bet体育在线们有了第三种更为方便快捷的选择,那就是使用Windows 10提供的Linux子系统。 阅读全文
posted @ 2019-10-13 08:17 Artech 阅读 (1349) 评论 (8) 编辑
摘要:除了微软自家的Windows平台, .NET Core针对Mac OS以及各种Linux Distribution(RHEL、Ubuntu、Debian、Fedora、CentOS和SUSE等)都提供了很好的支持。365bet体育在线们先来体验一下使用Mac来开发.NET Core应用, 阅读全文
posted @ 2019-10-12 08:46 Artech 阅读 (2460) 评论 (3) 编辑
摘要:由于ASP.NET Core框架在本质上就是由服务器和中间件构建的消息处理管道,365bet体育在线在它上面构建的应用开发框架都是建立在某种类型的中间件上,整个ASP.NET Core MVC开发框架就是建立在用来实现路由的EndpointRoutingMiddleware和EndpointMiddleware中间件上。ASP.NET Core MVC利用路由系统为它分发请求,并在此基础上实现针对目标Controller的激活、Action方法的选择和执行,以及最终对于执行结果的响应。在介绍的实例演示中,365bet体育在线们将对上面创建的ASP.NET Core作进一步改造,使之转变成一个MVC应用。 阅读全文
posted @ 2019-10-11 08:18 Artech 阅读 (1945) 评论 (9) 编辑
摘要:365bet体育在线们在《上篇》利用dotnet new命令创建了一个简单的控制台程序,接下来365bet体育在线们将它改造成一个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 阅读 (3759) 评论 (12) 编辑
摘要:.NET Core带来了全新的开发体验,但开发方式的差异根本不足以成为你快速跨入.NET Core 世界的门槛,因为在.NET Core在很多方面比传统的.NET Framework应用开发要简单。为了消除很多尚未接触过.NET Core的读者对未知世界的恐惧,365bet体育在线们先通过几个简单的Hello World应用让大家感受一下在Windows上的.NET Core全新的开发体验。 阅读全文
posted @ 2019-10-09 08:07 Artech 阅读 (6583) 评论 (17) 编辑
摘要:.NET Core正式发布之后,365bet体育在线为.NET Core度身定制的AOP框架Dora.Interception也升级到3.0。这个版本除了升级底层类库(.NET Standard 2.1)之外,365bet体育在线还对它进行大范围的重构甚至重新设计。这次重构大部分是在做减法,其目的在于使设计和使用更加简单和灵活,接下来365bet体育在线们就来体验一下在一个ASP.NET Core应用程序下如何使用Dora.Interception。 阅读全文
posted @ 2019-10-08 08:41 Artech 阅读 (2386) 评论 (25) 编辑
摘要:HttpClient在Web调用中具有广泛的应用,而为它添加默认请求头是365bet体育在线们经常遇到的需求,365bet体育在线介绍4种为HttpClient添加默认请求头的方式。 阅读全文
posted @ 2019-09-03 21:38 Artech 阅读 (2865) 评论 (20) 编辑
摘要:365bet体育在线们知道通过C#编写的.NET程序在编译后会转化成IL Code,在运行时以及时编译的方式转化成机器指令。如果想“篡改”某个方法的实现,要么在JIT之前改变IL代码,要么直接修改最终的机器指令。365bet体育在线采用第二种解决方案,基本的思路就是将将原方法的机器指令修改为JUMP(对应x86二进制为0xE9)指令实现向目标方法的跳转。 阅读全文
posted @ 2019-08-14 20:43 Artech 阅读 (3157) 评论 (17) 编辑
摘要:《三体》让365bet体育在线们了解了什么是“降维打击”,在软件设计领域很多时候需要反其道而行。对于某个问题,如果不能有效的解决,可以考虑是否可以上升一个维度,从高维视角审视问题往往可以找到捷径。软件设计是抽象的艺术,“升维打击”实际上就是“维度”层面的抽象罢了。 阅读全文
posted @ 2019-06-17 06:51 Artech 阅读 (7739) 评论 (32) 编辑
摘要:2019年1月19日,微软技术(苏州)俱乐部成立,365bet体育在线受邀在成立大会上作了一个名为《ASP.NET Core框架揭秘》的分享。在此次分享中,365bet体育在线按照ASP.NET Core自身的运行原理和设计思想创建了一个 “迷你版” 的ASP.NET Core框架,并且利用这个 “极简” 的模拟框架阐述了ASP.NET Core框架最核心、最本质的东西。整个框架涉及到的核心代码不会超过200行,涉及到7个核心的对象。 阅读全文
posted @ 2019-01-28 08:09 Artech 阅读 (28576) 评论 (132) 编辑
摘要:这里所谓的与第三方AOP框架的整合不是说改变Dora.Interception现有的编程,而是恰好相反,即在不改变现有编程模式下采用第三方AOP框架或者自行实现的拦截机制。虽然365bet体育在线们默认提供基于IL Emit实现方式,并且对IL指令进行了深度的优化,但是如果365bet体育在线们真的具有更好的选择,365bet体育在线们可以通过简单的扩展完成对底层拦截机制改变 阅读全文
posted @ 2018-11-27 07:21 Artech 阅读 (2724) 评论 (4) 编辑
摘要:对于.NET Core程序开发来说,依赖注入已经成为无处不在并且“深入骨髓”的东西,不论是在进行业务应用的开发,还是进行基础组件的开发,依赖注入是实现“松耦合”最为理想的方式(没有之一),365bet体育在线Dora.Interception必须将两者无缝地集成在一起。 阅读全文
posted @ 2018-11-24 08:08 Artech 阅读 (1413) 评论 (2) 编辑
摘要:在《以约定的方式定义拦截器》中,365bet体育在线们通过对拦截器的介绍了Dora.Interception的两种拦截机制,即针对接口的“实例拦截”针对虚方法的“类型拦截”。365bet体育在线们介绍了拦截器的本质以及基于约定的拦截器定义方式,接下来365bet体育在线们将着重关注拦截器的应用问题。 阅读全文
posted @ 2018-11-22 23:49 Artech 阅读 (1311) 评论 (5) 编辑
摘要:上一篇《更加简练的编程体验》提供了最新版本的Dora.Interception代码的AOP编程体验,接下来365bet体育在线们会这AOP框架的编程模式进行详细介绍,本篇文章着重关注的是拦截器的定义。采用“基于约定”的Interceptor定义方式是Dora.Interception区别于其他AOP框架的一个显著特征,要了解拦截器的编程约定,就得先来了解一下Dora.Interception中针对方法调用的拦截是如何实现的。 阅读全文
posted @ 2018-11-21 22:07 Artech 阅读 (1363) 评论 (3) 编辑
摘要:很久之前开发了一个名为Dora.Interception的开源AOP框架,最近对它作了一些改进。这个新版本对拦截器的定义和应用提供了更加简单的定义方式,同时对扩展性方法作了较大的改进,接下来365bet体育在线们通过一个简单实例来体验一下。 阅读全文
posted @ 2018-11-20 23:57 Artech 阅读 (3559) 评论 (6) 编辑