zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Android开发 设置控件边角半圆
    Android开发 使用XML文件设置背景变化
    Android开发 ImageButton加载drawable文件问题
    Android开发 网络检测(使用广播监听)
    android studio无法在可视化页面预览布局文件
    jdbc连接oracle数据库
    「数学」- 暑假后文化课能力复健 20210906 ~ 20210912
    「数学」- 暑假后文化课能力复健 20210830 ~ 20210905
    「数学」高等代数学习笔记
    「数学」浅谈极值点偏移问题的处理技巧
  • 原文地址:https://www.cnblogs.com/acejason/p/4064990.html
Copyright © 2011-2022 走看看