NopCommerce 1. NopCommerce Application_Start启动过程
这里简单介绍整个启动过程,其他具体的后续讲解
从Application_Start中执行开始,一开始执行EngineContext.Initialize(false);
EngineContext 是对IEngine接口的一个封装,NopEngine则实现了IEngine接口,NopEngine主要是封装了依赖注入(autofac)和AutoMapper的方法,它可以方便呢的注册依赖注入和automapper,并且对外提供Resolve来解析
1. NopConfig:读取web.config配置
改类是实现对web.config中的自定义section NopConfig的内容的封装
NopConfig实现了IConfigurationSectionHandler.Create(),主要操作是将xmlNode的属性获取并设置到NopConfig中定义的属性中,之后就可以直接使用NopConfig获取这些配置信息
2. Singleton类,实现单例模式
该类内部是一个静态字段的IDictionary<Type,object>缓存
继承类之一Singleton<T>提供Instance 来获取和是设置IDictionary<Type,object>字段来实现单例获取和设置实例
3. IEngine 接口
该接口非常重要,主要对外提供autofac的解析服务
内部其实是实现了autofac依赖注入和automapper的注册
4. IEngine的实现类NopEngine对autofac的封装
System.Web.Mvc.DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 方法来设置DR
封装在RegisterDependencies(config)方法中,首先定义一个ContainerBuilder 实例,然后通过SetResolver来注册.
这里涉及到IDependencyRegistrar,该接口定义了Register方法,这样每个程序集中都可以实现该接口的Regiseter方法来提供具体的注册,并在此处利用反射获取这些实现类,然后统一注册
通过完成这一步之后,NopEngine又封装了autofac的Resolve方法,来提供对接口和类的实现类的解析工作
5. NopEngine中AutoMapper的注册
这里主要涉及的接口是IMapperConfiguration,该接口提供GetConfiguration方法
基本思路也是利用反射,得到所有IMapperConfiguration的实现类,然后执行GetConfiguration,再调用AutoMapperConfiguration.Init()初始化这一步的返回值,这样就完成了AutoMapper的注册
6. NopEngine中启动IStartupTask
涉及到IStartupTask接口,提供一个Execute方法
利用反射可以找到6个实现类
1. EfStartUpTask
SetDatabaseInitializer()方法实现对数据库的初始化,主要是将~/App_Data/Install/SqlServer.Indexes.sql 或SqlServer.StoredProcedures.sql 中的sql语句执行
7. 对ViewEngines 添加自定义ThemeableRazorViewEngine
主要涉及的接口是IViewEngine,提供了FindView(),FindPartialview(),ReleaseView() 三个方法
IViewEngine ->
VirtualPathProviderViewEngine –>
ThemeableVirtualPathProviderViewEngine –>
ThemeableRazorViewEngine
8. 设置MetadataProvider
System.Web.Mvc.ModelMetadataProviders.Current = new NopMetadataProvider();
9. 路由设置
1. Area注册,主要是为Nop.Admin注册后台页面的路由
本质是向RouteTable中添加一条RouteData的记录而已
2. 默认路由注册
其中的IgnoreRoute也是添加一条RouteData记录
主要涉及Nop.Web的路由注册,以及插件的路由注册
IRoutePublish接口封装了对IRouteProvider接口,能够帮助完成路由注册操作
插件路由注册是通过反射获取IRouteProvider接口的实现类,然后执行其中的RegisterRoutes()方法来注册路由
IRouteProvider非常重要,是所有的路由的注册信息所在
10. 添加Fluent Validation
ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(new NopValidatorFactory()));
NopValidatorFactory 类继承了AttributedValidatorFactory,重写了GetValidator方法,该方法主要是获取要验证的Model的定义的Attribute属性,这些Attribute都是实现了FluentValidation.IValidator接口
在IValidator接口的实现类的构造函数中使用RuleFor()来对属性进行验证
NopCommerce 1. NopCommerce Application_Start启动过程的更多相关文章
- zookeeper源码分析之一服务端启动过程
zookeeper简介 zookeeper是为分布式应用提供分布式协作服务的开源软件.它提供了一组简单的原子操作,分布式应用可以基于这些原子操作来实现更高层次的同步服务,配置维护,组管理和命名.zoo ...
- [原] KVM 虚拟化原理探究(2)— QEMU启动过程
KVM 虚拟化原理探究- QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_ ...
- Openfire的启动过程与session管理
说明 本文源码基于Openfire4.0.2. Openfire的启动 Openfire的启动过程非常的简单,通过一个入口初始化lib目录下的openfire.jar包,并启动一个 ...
- 探索 Linux 系统的启动过程
引言 之所以想到写这些东西,那是因为我确实想让大家也和我一样,把 Linux 桌面系统打造成真真正正日常使用的工具,而不是安装之后试用几把再删掉.我是真的在日常生活和工作中都使用 Linux,比如在 ...
- Linux内核启动过程概述
版权声明:本文原创,转载需声明作者ID和原文链接地址. Hi!大家好,我是CrazyCatJack.今天给大家带来的是Linux内核启动过程概述.希望能够帮助大家更好的理解Linux内核的启动,并且创 ...
- SpringMVC启动过程详解(li)
通过对SpringMVC启动过程的深入研究,期望掌握Java Web容器启动过程:掌握SpringMVC启动过程:了解SpringMVC的配置文件如何配置,为什么要这样配置:掌握SpringMVC是如 ...
- Android源码——Activity组件的启动过程
根Activity启动过程 Launcher启动MainActivity的过程主要分为6个步骤: 一.Launcher向ActivityManagerService发送一个启动MainActivity ...
- Netty源码分析之客户端启动过程
一.先来看一下客户端示例代码. public class NettyClientTest { public void connect(int port, String host) throws Exc ...
- linux源码分析(二)-启动过程
前置:这里使用的linux版本是4.8,x86体系. 这篇是 http://home.ustc.edu.cn/~boj/courses/linux_kernel/1_boot.html 的学习笔记. ...
随机推荐
- 个人作业3-个人总结(Alpha阶段)
一.个人总结 1.团队状况:这是我们第一次团队开发,小组成员的编程水平都相对一般,要在一周内完成一个APP是一个很大的考验.再加上冲刺的那周团队大半成员都在为一个比赛培训,时间就更少了,曾经有很多次我 ...
- 【Alpha阶段】第六次scrum meeting
一.会议照片 二.会议内容 姓名 学号 负责模块 昨日任务完成度 今日任务 杨爱清 099 界面设计和交互功能 完成 设计界面 杨立鑫 100 数据库搭建和其他 完成 将数据库与其他模块连接 林 钊 ...
- 201521123067 《Java程序设计》第8周学习总结
201521123067 <Java程序设计>第8周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 Q1.List中指定 ...
- linux(CentOS5.8)环境下搭建Radius
本文记录了freeRadius在CentOS5.8环境下的基本搭建过程,未涉及mysql的加入及配置 freeradius官方地址:http://freeradius.org/ 环境:CentOS5. ...
- 使用 Python & Flask 实现 RESTful Web API
环境安装: sudo pip install flask Flask 是一个Python的微服务的框架,基于Werkzeug, 一个 WSGI 类库. Flask 优点: Written in Pyt ...
- temp-重庆农商行二次出差
1, 住宿(远舰商务酒店) 与胡仕川一起住 1722房间, 178-27=151(返现后). 7月30日 7月31日 8月1日 8月2日 8月3日 2, 住宿(郎菲酒店)一个人住, 158 ...
- MapReduce执行过程
Mapper任务的执行过程: 第一阶段是把输入文件按照一定的标准分片(InputSplit),每个输入片的大小是固定的.默认情况下,输入片(InputSplit)的大小与数据块(Block)的大小是相 ...
- windows 下面安装gcc
0.环境说明: win7 家庭版64位 1.下载编译器 https://sourceforge.net/projects/mingw/?source=typ_redirect 如图所示: 注意,安装的 ...
- 初识Hibernate之环境搭建
相信所有做后端的程序员同行们,没有不知道Hibernate大名的.这是一个经典的轻量级Java EE持久层的解决方案,它使得我们程序员能以面向对象的思维操作传统的关系型数据库,这也是其存在的 ...
- 新书发布《每天5分钟玩转Docker容器技术》
后台不时收到关于纸质版教程书籍的询问,今天终于可以给大家一个交代了. <每天5分钟玩转Docker容器技术>现已在各大书城上架. 比较了一下,目前京东上最实惠:https://item.j ...