213. Orchard學習 二 3、001.IOrchardHost 與Autofac

 2023-12-06 阅读 23 评论 0

摘要:? 繼前篇,在Orchard Application_Start() -> HostInitialization() 里,調用 OrchardStarter.CreateHost創建IOrchardHost實例。 1: /// <summary> 2: /// OrchardHost Initialization. OrchardHost 初始化。 3: /// </summary> 4: private stati

?

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

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息