nopCommerce_4.4功能实现详解-----第2章 .NetCore框架依赖注入具体实现定义的分割、迁移和扩展

.NetCore框架是两个基本需求的工程实践:1、请求应答机制的工程实践(功能需求);2、依赖注入思想的技术实践(技术需求)。功能需求的实现是.NetCore框架被微软开发出来的根本因素,由其它软件工具开发商开发出了基于依赖注入思想的软件开发工具,微软为了应对其它软件工具开发商,微软定义了.NetCore框架是通过赖注入思想的技术实践(技术需求)来实现请求应答机制(功能需求)。

根据两个基本需求,.NetCore框架只在“Startup”类中提供了两个方法Configure、 ConfigureService,让开发者通过这两个方法来自定义和扩展,开发者所需的所有操作。国内的开发者习惯把所有自定义和扩展操作直接定义在这两个方法中,使整个程序开发的实现逻辑简单易懂,但也会造成功能实现的堆砌而混乱。“nopCommerce”为了让整个软件工程功能实现, 显得更加的条理浅析和具有逻辑性, 同时让Configure、 ConfigureService两个方法实现显得整洁,“nopCommerce”把许多需要直接定义在这两个方法中操作,按照所需实现的具体功能迁移定义到相应的类中,并根据需求,对这些类和类中的方法在迁移定义的同时,进行了相应的扩展。“nopCommerce”的实现虽然有上优点,但是“nopCommerce”十分喜欢把一个具体的功能实现分割迁移定义在不同项目的中,造成一个具体功能实现逻辑十分复杂,由于实现逻辑复杂、实现功能分割对于程序阅读者来说要想通透的理解整个“nopCommerce”工程具体实现的基本原理,是需要下一翻苦工的。

Configure方法是.NetCore框架根据功能需求所暴露的方法,按照客户发送的请求Configure方法让开发者根据请求所需要实现功能要求,以“正溯”操作方式调用.NetCore框架所定义的相应内置中间件方法构建一个用于处理用户请求的功能管道,这些方法会根据用户需求通过计算、整合服务器中的资源,并整合这些操作结果以“回溯”操作方式,反向顺序调用该方法中内置中间件方法, 把操作结果在客户端显式或隐式(cookie)的呈现出来。由于功能实现的必须要求所以Configure方法被.NetCore框架定义为是一个必须被定义和调用的方法(因为不调用该方法开发者就不能在.NetCore框架的基础上开发出自己所需要的软件)。

依赖倒置思想的技术实现是微软对.NetCore框架所提出的技术需求,这种技术需求和实现就是依赖注入技术,即.NetCore框架是在依赖注入技术所规定准则和标准的基础上构建的。.NetCore框架通过所暴露的ConfigureService方法让开发者强制遵循依赖注入技术所规定准则和标准进行自定义开发。如果开发者没有遵循这些准则和标准,会因出现逻辑异常程序从而不会被正常执行。

Configure和ConfigureService方法关系:

    开发者在Configure方法中所定义的内置中间件方法和自定义方法,必须在ConfigureService方法定义相应的内置中间件方法和接口及其相应类型必须依赖注入到.NetCore框架所定义的内置依赖注入容器中,为类的实例化提供支撑。这样才能保证.NetCore框架的内置方法或相应的构造方法对内置依赖注入容器中,指定类显式或隐式的进行实例化操作,这也是.NetCore框架默认必须包括Configure 方法以创建应用的请求处理管道,而可选择性地包括 ConfigureServices 方法以配置应用的服务的重要因素。

    必须包括 Configure 方法以创建应用的请求处理管道。的因素。

    下面将会按照自顶向下的开发模式来解释“nopCommerce”是怎样来原来需要定义在Startup类Configure、 ConfigureService两个方法中的功能实现进行分割、迁移并扩展定义到不同项目的不同类中的。

    在工程中分别添加项目Controllers、Nop.Web,原本Controllers功能是被“nopCommerce”定义在Nop.Web中的,但是本人更为习惯把Controllers功能从Web项中迁移出来,单独作为一个项目定义在工程中,在Controllers项目添加InstallController定义。Nop.Web项构建是基于.NetCore框架所提供的MVC模板,删除一些当前使用不到的由MVC模板默认提供操作,并添加InstallController相关视图。对上述所有功能更为具体实现和注释见:21-05-10_Nop4.4(002_Nop.Web最简实现,默认页被正常启动)。

在工程中添加项目Nop.Web.Framework,把原本定义在Startup. ConfigureServices方法中的MVC模板依赖注入内置中间件方法迁移并扩展定义在Nop.Web.Framework.Infrastructure.Extensions.ServiceCollectionExtensions.AddNopMvc方法中,它分割定义了关于MVC内置中间件方法的特定操作。

0005、ServiceCollectionExtensions

对上述所有功能更为具体实现和注释见:21-05-10_Nop4.4(003_Nop.Web.Framework使用迁移定义内置中间件方法后,默认页被正常启动)。

“nopCommerce”在Nop.Core.Infrastructure中分别定义了:EngineContext、IEngine和NopEngin用来分割、定义和扩展原本定义Startup类的两个方法,它们分割定义一些通过操作,以实现对Startup类两个方法所调用内置中间件方法特定操作实现类的批量实例化操作。

0006、EngineContext、IEngine、NopEngine

    分别在Nop.Core.Infrastructure中和Nop.Web.Framework.Infrastructure添加接口和类定义:INopStartup、NopMvcStartup,同时在Nop.Web.Framework.Infrastructure.Extensions.ServiceCollectionExtensions类中下定义相关方法 ConfigureApplicationServices(用于整合所有与依赖注入相关的操作,通过引擎实例批量实例化特定操作来实现),它们依然是用来分割、定义和扩展原本定义Startup类的两个方法的。由于依赖注入和批量操作的需要“nopCommerce”声明了一个接口(INopStartup),该接口声明了Startup类中的两个方法以供内置中间件方法特定操作实现类对两个方法进行特定的具体实现和扩展。

0007、INopStartup、NopMvcStartup

对上述所有功能更为具体实现和注释见:21-05-13_Nop4.4(004_NopEngine引擎批量实例化内置中间件方法,默认页被正常启动)。“nopCommerce” 通过本章节所讲述到的类来完成了对Startup类中两个方法实现功能的分割、迁移和扩展,它们进行分割的标准是通用实现操作和特定实现操作。

0008、IDependencyRegistrar、DependencyRegistrar

“nopCommerce” 在两个不同项目中分割定义用于依赖注入操作的实现类,这两类继承于同一个接口“IDependencyRegistrar”。同时这两类整合定义了所有自定义接口及其实现类依赖注入到依赖注入容器的操作。“nopCommerce”通过继承 “IDependencyRegistrar” 接口实现类实例,通过反向注入操作,调用类型查找器实例从启动检索项符合标准的DLL类型文件,根据DLL类型文件获取所有相应程序集实例。最终批量的把构建程序集实例所有接口及其实现类注入到.NetCore框架所定义的内置依赖注入容器实例中。 

“nopCommerce4.2、nopCommerce4.3”所使用的是第三方依赖注入容器中间件:“Autofac.Extensions.DependencyInjection”而“nopCommerce4.4”依赖注入容器使用的却是.NetCore框架所定义的内置依赖注入容器,所以“nopCommerce4.4”依赖注入操作对于“nopCommerce4.2、nopCommerce4.3”而言从实现逻辑和具体定义相对简单。

对上述所有功能更为具体实现和注释见:21-05-13_Nop4.4(005_自定接口及其实现类依赖注入到内置依赖注入容器中,默认页被正常启动)。

本人认为在Nop.Core项目中最好定义一些通用的基础性操作,而把功能实现定义在Nop.Web.Framework中,所以EngineContext、IEngine、NopEngine、INopStartup、NopMvcStartup、IDependencyRegistrar和DependencyRegistrar这些声明和最好迁移定义在Nop.Web.Framework.Infrastructure中显得更加符合“nopCommerce”对工程项目中的类所实现功能的定位。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值