213. Orchard学习 二 3、001.IOrchardHost 与Autofac
继前篇,在Orchard Application_Start() -> HostInitialization() 里,调用 OrchardStarter.CreateHost创建IOrchardHost实例。
1: /// <summary>
2: /// OrchardHost Initialization. OrchardHost 初始化。
3: /// </summary>
4: private static IOrchardHost HostInitialization(HttpApplication application)
5: {
6: // 注册三个 MVC原生类型为单例模式:RouteTable.Routes、ModelBinders.Binders、ViewEngines.Engines。
7: var host = OrchardStarter.CreateHost(MvcSingletons);
8:
9: host.Initialize();
10:
11: // initialize shells to speed up the first dynamic query
12: // 初始化一个 shell。
13: host.BeginRequest();
14: host.EndRequest();
15:
16: return host;
17: }
1: /// <summary>
2: /// 创建 OrchardHost。 CreateHostContainer -> HostContainer.Resolve(IOrchardHost)。
3: /// </summary>
4: /// <param name="registrations">在Global中定义,注册三个 MVC原生类型为单例模式:RouteTable.Routes、ModelBinders.Binders、ViewEngines.Engines。</param>
5: /// <returns></returns>
6: public static IOrchardHost CreateHost(Action<ContainerBuilder> registrations)
7: {
8: var container = CreateHostContainer(registrations);
9: return container.Resolve<IOrchardHost>();
10: }
在创建HOST之初,就构建了HostContainer,这是一个静态方法,用于构造Host解析容器,并使用Autofac为系统进行IOC注册。
CreateHostContainer代码省略。
通过总结我们知道Autofac几种常用的类型注册方式如下:
一、类型注册
直接按照类型及其接口定义进行注册
二、实例注册
使用类型实例进行注册
三、命名注册
使用类型及其接口定义进行注册,使用 .Named扩展进行约束
四、键值注册
使用类型及其接口定义进行注册,使用 . Keyed扩展进行约束
在CreateHostContainer方法里,除了上述形式外,还使用了:
五、模块注册
模块注册,是为抽象类 Autofac.Module定义的一个实现。其主要的方法有
u Load 在IOC注册调用RegisterModule时发生,可以在Load中进行类型注册,就像前四种注册方式一样进行。
u Configure 在RegisterModule调用后,将Load方法里的内容加载到Autofac注册表里时发生。
通过测试发现,在IOC注册时,前四种注册方式,所注册的类型默认按类型(Type)、命名(Named)、键值(Keyed)进行了分组,在被解析的类型构造参数中,可以使用参数构造定义的约束来使用不同的注册类型。并且Autofac 对同一个“接口类型”注册进来的不同“实现类型”,会自动形成一个 IEnumerable-List(即 可枚举的集合)。
DEMO代码
相关参考
http://www.cnblogs.com/hkncd/archive/2012/11/28/2792474.html
213. Orchard学习 二 3、001.IOrchardHost 与Autofac的更多相关文章
- 211. Orchard学习 二 2、ManualResetEvent 与 AutoResetEvent
一.Orchard里异步请求处理线程队列的控制 Orchard的Orchard.WarmupStarter模块,为HttpApplication.BeginRequest时间附加了一个异步处理事件:B ...
- 200. Orchard学习 目录
201. Orchard学习 一.基础 210. Orchard学习 二.启动 211. Orchard学习 二 1.Application_Start 212. Orchard学习 二 2.Manu ...
- emberjs学习二(ember-data和localstorage_adapter)
emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...
- ReactJS入门学习二
ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...
- TweenMax动画库学习(二)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- Hbase深入学习(二) 安装hbase
Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...
- Struts2框架学习(二) Action
Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...
- Python学习二:词典基础详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...
- Quartz学习--二 Hello Quartz! 和源码分析
Quartz学习--二 Hello Quartz! 和源码分析 三. Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...
随机推荐
- JAVA中字符串操作几种方式对比
@参考文章 方法及原理: 方法1:a=a+b实际上另开辟一个空间c=a+b;然后将c的引用赋给a 方法2:a += b实际上是建立一个StringBuffer,然后调用append(),最后再将Str ...
- 记录一次Centos磁盘空间占满的解决办法(转)
原文地址:https://blog.csdn.net/everything1209/article/details/70209157 解决前 磁盘使用情况: 第二块磁盘使用率达到97% [root@f ...
- WebApi上传文件
上网搜了下Web Api上传文件的功能,发现都写的好麻烦,就自己写了一个,比较简单,直接上传文件就可以,可以用Postman测试. 简单的举例 /// <summary> /// 超级简单 ...
- Matplotlib 基本用法
1.基础应用 >>> import matplotlib.pyplot as plt >>> import numpy as np #使用np.linspace定义 ...
- 除了Office和wps,还有什么办公软件比较好用?
一.不能没有的pdf软件 以下介绍的是PDF(Portable Document Format)常用的阅读.编撰以及其他工具.阅读工具1.Adobe AcrobatReader中文版应用平台:Wind ...
- Connection lost: The server closed the connection
想必很多初学者都会遇到这个问题 其实很简单.mysql有个机制,就是8小时无通信,myslq就会自动关闭数据; 解决方案(2选1): 或者: 1.定时去做一个查询,就是 select * from X ...
- dataTables分页实现两个前提
., 'desc' ]]}); .数据结构
- Java第三次实验敏捷开发与XP实验
实验三-1 1.实验要求: 实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse的内容替换成IDEA 参考 http: ...
- django的简单原理
一.自定义客户端和服务端的请求响应 1.客户端打开url,向服务器发出请求 2.服务端用socket写一个py,用于接收请求和做出响应 3.服务端接收请求 4.服务端模拟HTTP协议做出响应,状态行为 ...
- ABP框架系列之九:(Abp-Session-会话)
Introduction ASP.NET Boilerplate provides IAbpSession interface to obtain current user and tenant wi ...