继前篇,在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

转载于:https://www.cnblogs.com/acejason/p/4064990.html

213. Orchard学习 二 3、001.IOrchardHost 与Autofac相关推荐

  1. OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack()

    OpenCV学习(二十四 ):角点检测(Corner Detection):cornerHarris(),goodFeatureToTrack() 参考博客: Harris角点检测原理详解 Harri ...

  2. PyTorch框架学习二十——模型微调(Finetune)

    PyTorch框架学习二十--模型微调(Finetune) 一.Transfer Learning:迁移学习 二.Model Finetune:模型的迁移学习 三.看个例子:用ResNet18预训练模 ...

  3. 深度学习二(Pytorch物体检测实战)

    深度学习二(Pytorch物体检测实战) 文章目录 深度学习二(Pytorch物体检测实战) 1.PyTorch基础 1.1.基本数据结构:Tensor 1.1.1.Tensor数据类型 1.1.2. ...

  4. linux trace学习(二)——trace使用

    linux trace学习(二)--trace使用 备注:   1. Kernel版本:4.19.123   2. 使用工具:Source Insight 4.0   3. 参考博客: Linux f ...

  5. VUE学习(二十一)、Vuex(getters、mapState与mapGetters、mapMutations与mapActions、多组件共享数据、模块化编码)

    VUE学习(二十一).Vuex(getters.mapState与mapGetters.mapMutations与mapActions.多组件共享数据.模块化编码) 一.Vuex普通实现求和案例 演示 ...

  6. C#多线程学习(二) 如何操纵一个线程

    C#多线程学习(二) 如何操纵一个线程 原文链接:http://kb.cnblogs.com/page/42529/ [1] C#多线程学习(二) 如何操纵一个线程 [2] C#多线程学习(二) 如何 ...

  7. spring security 学习二

    spring security 学习二 doc:https://docs.spring.io/spring-security/site/docs/ 基于表单的认证(个性化认证流程): 一.自定义登录页 ...

  8. STL源码剖析学习二:空间配置器(allocator)

    STL源码剖析学习二:空间配置器(allocator) 标准接口: vlaue_type pointer const_pointer reference const_reference size_ty ...

  9. mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...

    MySQL 基础学习二:创建一个用户表,并 增删改查 提示:MySQL 命令建议都用大写,因为小写运行时,还是翻译成大写的. 第一步,创建一个用户表 1,打开控制台,进入数据库 C:\Users\Ad ...

最新文章

  1. Date String转换
  2. Mysql视图与数据备份
  3. 这些工具将提高您的Android生产率
  4. freetype字体位图转距离场_那些火遍ins的字体小技巧,不看你就亏了
  5. 万豪国际数据再遭泄露影响520万客户,两名员工账户为突破口
  6. 《C++(二)--智能指针》
  7. oracle同音模糊查询
  8. 陈进: 创业维艰吗? 换个皮肤就能获批一亿经费!
  9. 设计原则Python
  10. 归去来兮辞 陶渊明
  11. select update delete
  12. connect() to unix:/home/tmp/myproject.sock failed (2: No such file or directory)
  13. 0基础python笔记str/list/tuple/dict
  14. XSS-challenge
  15. css style 命名,CSS_CSS样式命名规范,命名一直是个让我头痛的问题 - phpStudy
  16. 多余的读写端口什么时候会对程序造成影响_RFID叉车仓储|RFID叉车读写器在智能仓库收发货环节中的应用...
  17. [NAS] Synology (群晖) DSM 7.X 挂载NTFS硬盘
  18. Android BroadCast
  19. Java培训实现月薪15k,我都经历了什么(绝不是广告)
  20. stm32+AT指令+ESP8266接入华为云物联网平台并完成属性上报与命令响应

热门文章

  1. 当你使用R安装包出现rdb is corrupt问题的时候
  2. arduino和轮毂电机接线_丰田Prius B电机技术解析
  3. 加州理工学院公开课:机器学习与数据挖掘_神经网络
  4. datetime数据类型_当pandas遇上数据类型问题
  5. php ipa 版本定制,class.php
  6. KNN(一)--简单KNN原理及实现
  7. DSP之时钟与定时器之一时钟发生器
  8. Shiro教程_2 Shiro+SpringBoot+Mysql+Redis(缓存)
  9. python 语法提示_Python 语法提示vim配置
  10. Spark StreamingContext创建方式