[转]NopCommerce之旅: 应用启动
本文转自:http://www.cnblogs.com/devilsky/p/5359881.html
一、基础介绍
Global.asax 文件(也称为 ASP.NET 应用程序文件)是一个可选文件,该文件包含响应 ASP.NET 或 HTTP 模块所引发的应用程序级别和会话级别事件的代码。
Application_Start是其中一个事件,在HttpApplication 类的第一个实例被创建时,该事件被触发它允许你创建可以由所有HttpApplication 实例访问的对象。
简单来说,Application_Start()就是一个ASP.NET应用程序启动时执行的方法,可以理解为应用程序入口。
二、代码分析Application_Start()
1.出于安全考虑,去除X-AspNetMvc-Version头
2.初始化上下文
3.判断是否初始化数据库
3.1 加载配置文件~/App_Data/Settings.txt
3.2 读取内容,若存在连接字符串则说明已初始化数据库
4.清空视图引擎,添加自定义视图引擎ThemeableRazorViewEngine,支持前台和后台页面分离,及主题适配。
5.增加一些功能性的元数据
6.注册常见的MVC物件,包括Area,Route
7.关闭MVC默认的标注特性Model验证,添加FluentValidation(一种验证组件)
8.启动定时任务
8.1 初始化所有创建的定时任务
8.2 启动定时任务线程
9.根据配置,是否启动MiniProfiler(ASP.NET MVC的性能分析工具,监控网站性能)
9.1 安装时默认为false,并配置在[dbo].[Setting]表,Name为storeinformationsettings.displayminiprofilerinpublicstore
9.2 配置方法
9.2.1 进入管理页面,进入配置菜单

9.2.2 检索storeinformationsettings.displayminiprofilerinpublicstore,定位该条目,修改Value值

9.2.3 启动效果,在页面左上角可看到该页面执行时间,参考MiniProfiler相关资料

10.记录应用启动日志
10.1 通过依赖注入实例化
10.2 日志写入数据库,表[dbo].[Log]
11.代码如下

1 protected void Application_Start()
2 {
3 //disable "X-AspNetMvc-Version" header name
4 MvcHandler.DisableMvcResponseHeader = true;
5
6 //initialize engine context
7 EngineContext.Initialize(false);
8
9 bool databaseInstalled = DataSettingsHelper.DatabaseIsInstalled();
10 if (databaseInstalled)
11 {
12 //remove all view engines
13 ViewEngines.Engines.Clear();
14 //except the themeable razor view engine we use
15 ViewEngines.Engines.Add(new ThemeableRazorViewEngine());
16 }
17
18 //Add some functionality on top of the default ModelMetadataProvider
19 ModelMetadataProviders.Current = new NopMetadataProvider();
20
21 //Registering some regular mvc stuff
22 AreaRegistration.RegisterAllAreas();
23 RegisterRoutes(RouteTable.Routes);
24
25 //fluent validation
26 DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
27 ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(new NopValidatorFactory()));
28
29 //start scheduled tasks
30 if (databaseInstalled)
31 {
32 TaskManager.Instance.Initialize();
33 TaskManager.Instance.Start();
34 }
35
36 //miniprofiler
37 if (databaseInstalled)
38 {
39 if (EngineContext.Current.Resolve<StoreInformationSettings>().DisplayMiniProfilerInPublicStore)
40 {
41 GlobalFilters.Filters.Add(new ProfilingActionFilter());
42 }
43 }
44
45 //log application start
46 if (databaseInstalled)
47 {
48 try
49 {
50 //log
51 var logger = EngineContext.Current.Resolve<ILogger>();
52 logger.Information("Application started", null, null);
53 }
54 catch (Exception)
55 {
56 //don't throw new exception if occurs
57 }
58 }
59 }

[转]NopCommerce之旅: 应用启动的更多相关文章
- 我的NopCommerce之旅(8): 路由分析
一.导图和基础介绍 本文主要介绍NopCommerce的路由机制,网上有一篇不错的文章,有兴趣的可以看看NopCommerce源码架构详解--对seo友好Url的路由机制实现源码分析 SEO,Sear ...
- 我的NopCommerce之旅(6): 应用启动
一.基础介绍 Global.asax 文件(也称为 ASP.NET 应用程序文件)是一个可选文件,该文件包含响应 ASP.NET 或 HTTP 模块所引发的应用程序级别和会话级别事件的代码. Appl ...
- 我的NopCommerce之旅(7): 依赖注入(IOC/DI)
一.基础介绍 依赖注入,Dependency Injection,权威解释及说明请自己查阅资料. 这里简单说一下常见使用:在mvc的controller的构造方法中定义参数,如ICountryServ ...
- 我的NopCommerce之旅(9): 编写Plugin实例
一.基础介绍 ——In computing, a plug-in (or plugin) is a set of software components that add specific abili ...
- 我的NopCommerce之旅(5): 缓存
一.基础介绍 1.什么是cache Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本. 2.为什么要用cache 即 ...
- 我的NopCommerce之旅(4): 定时任务之邮件
一.功能简介 用户购买物品生成订单后,系统将发送邮件提醒给用户 二.操作步骤 后台配置一个系统的默认发送邮箱 启动定时任务,这里包括多个任务,只需要启动邮件任务 查看邮件发送情况 三.数据库分析 [d ...
- 我的NopCommerce之旅(1): 系统综述
一.概述 NopCommerce是一个开源的购物网站,它的特点是Pluggable modular/layered architecture(可插拔模块分层架构) 二.功能特色介绍 1.适配手机端 2 ...
- 我的NopCommerce之旅(3): 系统代码结构分析
一.概述 基于MVC 二.详细描述 \Libraries\Nop.Core 核心类,包括缓存.事件.帮助类.业务对象(订单.客户实体) \Libraries\Nop.Data 数据访问层,采用Enti ...
- 我的NopCommerce之旅(2): 系统环境及技术分析
一.系统环境 IIS7.0 or above ASP.NET 4.5(MVC 5.0) .NET Framework 4.5.1 or above VS 2012 or above 二.架构设计 Pl ...
随机推荐
- Charted – 自动化的可视化数据生成工具
Charted 是一个让数据自动生成可视化图表的工具.只需要提供一个数据文件的链接,它就能返回一个美丽的,可共享的图表.Charted 不会存储任何数据.它只是获取和让链接提供的数据可视化. 在线演示 ...
- 分享50款 Android 移动应用程序图标【上篇】
在这个移动程序流行的时代,持续增长的应用程序经济充满了商业机遇.任何对应用程序设计感兴趣的人,将会喜欢上这里的50个独特的 Android 应用程序图标.这些例子中的图标能够让应用程序的设计更具吸引力 ...
- 在 Xamarin.Android 中使用 Notification.Builder 构建通知
0 背景 在 Android 4.0 以后,系统支持一种更先进的 Notification.Builder 类来发送通知.但 Xamarin 文档含糊其辞,多方搜索无果,遂决定自己摸索. 之前的代码: ...
- Get item by sharepoint web service jquery
对于sp2010,在ie浏览器中这个代码无法生效,只有chrome可以生效. //获取附件id function GetAttachments(listName) { var soapEnv = '& ...
- 阿帕奇apache服务器和webDav服务器快速配置。
当自己在家敲代码需要发请求时,就可以配置本地apache,Mac电脑自带的服务器.这个比windows上的本地服务器还要好用,下面写下最快速配置方案. 0.在开始之前需要给自己的电脑设置下开机密码,想 ...
- 遍历collection
链接 遍历NSArray 正向遍历 for (id object in array) 反向遍历 for (id object in [array reverseObjectEnumerator]) 如 ...
- tomcat中的JSP引擎
jsp文件解析成class文件过程需要利用tomcat的jasper组件. Jasper是tomcat中使用的JSP引擎,在Tomcat 6中使用的是Jasper 2,相对于原来的版本作了不少的改进, ...
- KVO的底层实现
1.KVO是基于Runtime机制实现的: 2.当某个类的对象的某个属性第一次被观察时,系统会在运行期间动态地创建该类的一个派生类,在这个派生类中重写基类的任何被观察属性的setter方法,派生类在被 ...
- android加固系列—5.加固前先学会破解,hook(钩子)jni层系统api
[版权所有,转载请注明出处.出处:http://www.cnblogs.com/joey-hua/p/5138585.html] crackme项目jni的关键代码(项目地址见文章底部),获取当前程序 ...
- %1$s,%2$s等的用法
String.format(String format, Object... args)方法中: format:格式字符串. 如:%1$s,%1$d,%2$s... ...