日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oxite分析(记录)

發布時間:2025/4/5 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oxite分析(记录) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

 二、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分析(记录)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。