二、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分析(记录)相关推荐

  1. 大众点评app分析记录

    本文是大众点评APP的分析记录. 声明:文章内容仅供参考学习,如有侵权请联系作者进行删除. 案例环境:夜神安卓5,APP版本10.45.7. 工具:Frida.Charles. 点评看不到http/h ...

  2. 技术贴_关于某信辅助分析记录和若干检测方法

    迪恩爱抚超时空最近几天出现了一款稳如狗的信外挂 某信蹦跶那么久- 从朋友借来某信 把分析记录写了下来 传说中稳如狗的F1秒杀到底是神魔恋? 众所周知某信用的是DLL劫持技术,所以无视TP驱动(也就是图 ...

  3. GandCrabV2.0病毒分析记录

    分析环境 吾爱破解虚拟机(XP系统) IDA 6.8 火绒剑 样本来源 https://www.52pojie.cn/thread-712552-1-1.html 病毒文件信息 文件: C:\Docu ...

  4. Linux 4.1最新内核usb与hid驱动分析记录

    Linux hid驱动分析记录 1.hid_add_device实现,在hid/hid-core.c中,匹配特殊驱动相关部分分析 该函数是在传输驱动probe中调用,例如usbhid中,也就是说usb ...

  5. db2和mysql性能_关于DB2数据库的性能分析记录

    很久没冒泡感觉: 之前做过oracle,mssql 查询优化,最近在做db2的 优化查询,发现一对比,感觉 db2还是很nice的,尤其是性能推荐索引重建这块.暂且这么认为, 我们熟悉的 一般看sql ...

  6. 利用python做微信聊天记录词云分析——记录美好回忆

    目录 1 概述 2 数据准备 2.1 安卓设备 2.1.1 Root手机,安装Root Explorer 2.1.2 用Root Explorer将聊天记录的数据文件导出并存入电脑 2.1.3 对En ...

  7. TU-ctf-2016 pwn woO 分析记录

    小动物很可爱的说? 放在ida中分析,发现已经有了获取flag的函数,不需要自己找system了,接下来就是如何控制程序的执行流程. 首先对程序功能作基本的分析: 新建动物时malloc一个结构体存放 ...

  8. 一次开发中并发删除插入死锁分析记录

    这两天在开发一个项目的时候有一个操作是多线程同步数据,每个线程同步一个类型的数据,同步流程是先删除此类型下所有数据,然后批量插入新数据.但是测试过程中会发现有死锁现象,虽然可以直接对删除插入代码使用同 ...

  9. 订单,用户,商品关联分析记录

    最近有做采购平台 订单,用户,商品关联分析 的任务 目的在于希望能产出  商品推荐商品或者 商品 推荐给用户  的数据 主要采用python的apriori  进行关联分析 样例代码如下 大概如下: ...

最新文章

  1. 【问链-区块链基础知识系列】 第十四课 数字货币交易所的前世、今生和未来(一)
  2. 编写python程序、创建名为class的数据库_Python中的元类(metaclass)以及元类实现单例模式...
  3. H5调用手机拨打电话的功能
  4. css3-12 transition+css或transform实现过渡动画
  5. unixbench类似_UnixBench的实现介绍-阿里云开发者社区
  6. centos7安装python3.8_centos7 安装python3.8
  7. 企业Linux系统部署OA系统上线实例
  8. 分享]人生忠告——七天改变人生影响世界
  9. 《Java从入门到放弃》JavaSE入门篇:JDBC(入门版)
  10. 编译原理(第3版)陈火旺——课后习题答案——第四章
  11. rdkit 修改分子
  12. 信度spss怎么做_毕业季:毕业论文利用spss做信度分析步骤详解
  13. 别了,Easy微博!
  14. vscode文件名颜色含义与右侧字母含义
  15. 飞猪java怎么样_2021春招面试必看:飞猪/新浪/饿了么内部Java面经手册首次发布...
  16. Android UI绘制流程源码详细讲解Draw(Canvas canvas)
  17. concurrent mode failure
  18. 电脑无法连接WiFi,一直显示无法连接此网络
  19. Android开发中Html.fromHtml(String source)方法过时的替代方法
  20. 华为OD岗位机试指南

热门文章

  1. PCA主成分分析以及Python实现(阅读笔记)
  2. 五种排序方式gif展示【python】
  3. 计算机网络技术中的NAT,计算机网络技术中的NAT-2.ppt
  4. 第一讲 ODE几何方法
  5. html 中embed标签使用
  6. java之对象的复制
  7. 移动硬盘由于IO设备错误,无法运行此项请求文件怎样恢复
  8. 项目总结二:人脸识别项目(Face Recognition for the Happy House)
  9. linux ssh免密登陆远程服务器
  10. 纯c gSoap实现WebService