Oxite分析(记录)
二、OixteSite项目中Global.asax文件中的Application_Start和Application_End方法
查看OxiteSite项目的Global.asax文件,发现其实现代码在Oxite项目的OxiteApplication类中。在Application_Start方法中对OxiteSite进行了初始化工作。
Application_Start方法具体做了哪些事呢?
一是设置依赖注入容器并将之存入应用程序状态中(HttpApplicationState)
二是根据配置加载模块 Oxite中使用的依赖注入容器为Unity(详见Enterprise Library 4.0以上版本)。
setupContainer方法设置注入容器并返回一个UnityContainer对象,保存为Application["container"]。稍后将仔细分析该方法。
Application["bootStrappersLoaded"]用于标认初始化是否完成。
load()方法调用静态方法Load(HttpContextBase context)。作用是根据配置加载指定模块(Module)。
Application_End方法调用unload()方法。在应用程序结束时,完成某些模块的清理工作。
三、setupContainer方法
预备知识:Unity (IOC/DI)、自定义web.config配置结点
通过setupContainer方法的方法名不难看出是用于设置依赖注入容器的。
在setupContainer方法中,首先定义一个IUnityContainer变量parentContainer: 首先,将几个基础对象注册为单例: parentContainer .RegisterInstance((OxiteConfigurationSection)ConfigurationManager.GetSection("oxite")) .RegisterInstance(new AppSettingsHelper(ConfigurationManager.AppSettings)) .RegisterInstance(RouteTable.Routes) .RegisterInstance(System.Web.Mvc.ModelBinders.Binders) .RegisterInstance(ViewEngines.Engines) .RegisterInstance(HostingEnvironment.VirtualPathProvider);
OxiteConfigurationSection类,自定义配置节点。其定义位与Oxite.Configuration命名空间下。是Oxite中实现模块化的配置文件。配置的结点单独放在OxiteSite项目下的oxite.config文件中。
AppSettingsHelper 类对ConfigurationManager.AppSettings 进行包装, 提供几个读取方法GetInt32、GetString等,用于读取web.config文件中的appSettings节点下的值。其实完全可以将这几个读取方法放入NameValueCollectionExtensions类(Oxite.Extensions命名空间下)。不过后来想了想,这里用AppSettingsHelper命名其实也可以明确该类的目的就是为了操作AppSettings结点。
RouteTable.Routes静态属性返回一个RouteCollection静态对象。RouteCollection类在System.Web.Routing程序集中定义。用于保存URL路由设置。 注入容器的目的是为了单元测试。
ModelBinders.Binders静态属性返回一个ModelBinderDictionary静态对象。用于处理数据绑定相关操作(获取表单、查询数据并转换;生成URL路径)。
ViewEngines.Engines静态属性返回一个ViewEngineCollection静态对象。用于视图引擎方面。
HostingEnvironment.VirtualPathProvider静态属性返回一个VirtualPathProvider静态对象。个人猜测可能会用在自定义ViewEngine中,不过目前Oxite版本中好像还没地方用,注释掉也没地方报错。
RouteTable.Routes、ModelBinders.Binders和ViewEngines.Engines是ASP.NET MVC底层比较基础性的属性或对象。值得花时间单独去学习。
接着,将web.config中的connectionStrings和自定义节点“oxite”(oxite.config文件)下的connectionStrings注册为单件。 foreach (ConnectionStringSettings connectionString in ConfigurationManager.ConnectionStrings) parentContainer.RegisterInstance(connectionString. Name, connectionString.ConnectionString); foreach (ConnectionStringSettings connectionString in parentContainer.Resolve<OxiteConfigurationSection>().ConnectionStrings) parentContainer.RegisterInstance(connectionString. Name, connectionString.ConnectionString);
疑问1:在运行时,站点不重启的情况下,如果oxite结点下的connectionStrings改变后,要怎样才能更新到依赖注入容器?这里的处理似乎欠妥。 后来我到Oxite.codeplex.com去问了,Oxite项目组的ErikPorter说目前得重启站点才行。希望他们尽快修正,不然所谓的模块热插拔会大打折扣。
接着看setupContainer方法: LoadModules类和LoadBackgroundServices类位于Oxite.BootStrapperTasks命名空间。从类命名上看,一个是和加载模块相关的,另一个是和加载后台服务相关的,具体是什么得往后细看了。两者都实现了Oxite.Infrastructure命名空间下的IBootStrapperTask接口。IBootStrapperTask就两个方法:Execute和Clearup。IBootStrapperTask我觉得可以直译为引导程序接口,其实例可以称为引导程序。
在这里我们只需要知道,Modules实例和LoadBackgroundSercies实例分别注册为单件。
接着看setupContainer方法中将一些类型也注册到依赖注入容器中,除了几个自定义生命周期的类型外,其他的都只是简单的映射,这里就不多说了。
在setupContainer结束返回值之前,会将web.config文件中Unity配置结点注册入容器中。如果配置结点和我们硬编码中的设置重复,则会覆盖硬编码中的配置。这一特性非常有用,它允许我们在使用程序的默认配置的同时,又提供了一个接口以供我们替换。详情可以查看相关Unity方面的资料。
转载于:https://www.cnblogs.com/jianshao810/archive/2010/05/18/1738511.html
Oxite分析(记录)相关推荐
- 大众点评app分析记录
本文是大众点评APP的分析记录. 声明:文章内容仅供参考学习,如有侵权请联系作者进行删除. 案例环境:夜神安卓5,APP版本10.45.7. 工具:Frida.Charles. 点评看不到http/h ...
- 技术贴_关于某信辅助分析记录和若干检测方法
迪恩爱抚超时空最近几天出现了一款稳如狗的信外挂 某信蹦跶那么久- 从朋友借来某信 把分析记录写了下来 传说中稳如狗的F1秒杀到底是神魔恋? 众所周知某信用的是DLL劫持技术,所以无视TP驱动(也就是图 ...
- GandCrabV2.0病毒分析记录
分析环境 吾爱破解虚拟机(XP系统) IDA 6.8 火绒剑 样本来源 https://www.52pojie.cn/thread-712552-1-1.html 病毒文件信息 文件: C:\Docu ...
- Linux 4.1最新内核usb与hid驱动分析记录
Linux hid驱动分析记录 1.hid_add_device实现,在hid/hid-core.c中,匹配特殊驱动相关部分分析 该函数是在传输驱动probe中调用,例如usbhid中,也就是说usb ...
- db2和mysql性能_关于DB2数据库的性能分析记录
很久没冒泡感觉: 之前做过oracle,mssql 查询优化,最近在做db2的 优化查询,发现一对比,感觉 db2还是很nice的,尤其是性能推荐索引重建这块.暂且这么认为, 我们熟悉的 一般看sql ...
- 利用python做微信聊天记录词云分析——记录美好回忆
目录 1 概述 2 数据准备 2.1 安卓设备 2.1.1 Root手机,安装Root Explorer 2.1.2 用Root Explorer将聊天记录的数据文件导出并存入电脑 2.1.3 对En ...
- TU-ctf-2016 pwn woO 分析记录
小动物很可爱的说? 放在ida中分析,发现已经有了获取flag的函数,不需要自己找system了,接下来就是如何控制程序的执行流程. 首先对程序功能作基本的分析: 新建动物时malloc一个结构体存放 ...
- 一次开发中并发删除插入死锁分析记录
这两天在开发一个项目的时候有一个操作是多线程同步数据,每个线程同步一个类型的数据,同步流程是先删除此类型下所有数据,然后批量插入新数据.但是测试过程中会发现有死锁现象,虽然可以直接对删除插入代码使用同 ...
- 订单,用户,商品关联分析记录
最近有做采购平台 订单,用户,商品关联分析 的任务 目的在于希望能产出 商品推荐商品或者 商品 推荐给用户 的数据 主要采用python的apriori 进行关联分析 样例代码如下 大概如下: ...
最新文章
- 【问链-区块链基础知识系列】 第十四课 数字货币交易所的前世、今生和未来(一)
- 编写python程序、创建名为class的数据库_Python中的元类(metaclass)以及元类实现单例模式...
- H5调用手机拨打电话的功能
- css3-12 transition+css或transform实现过渡动画
- unixbench类似_UnixBench的实现介绍-阿里云开发者社区
- centos7安装python3.8_centos7 安装python3.8
- 企业Linux系统部署OA系统上线实例
- 分享]人生忠告——七天改变人生影响世界
- 《Java从入门到放弃》JavaSE入门篇:JDBC(入门版)
- 编译原理(第3版)陈火旺——课后习题答案——第四章
- rdkit 修改分子
- 信度spss怎么做_毕业季:毕业论文利用spss做信度分析步骤详解
- 别了,Easy微博!
- vscode文件名颜色含义与右侧字母含义
- 飞猪java怎么样_2021春招面试必看:飞猪/新浪/饿了么内部Java面经手册首次发布...
- Android UI绘制流程源码详细讲解Draw(Canvas canvas)
- concurrent mode failure
- 电脑无法连接WiFi,一直显示无法连接此网络
- Android开发中Html.fromHtml(String source)方法过时的替代方法
- 华为OD岗位机试指南