四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

ASP.NET MVC3 Service Location

  介紹

  ASP.NET MVC3 的一個(gè)重要的新特性就是允許注冊(cè)一個(gè)服務(wù)點(diǎn) Service Location,然后在框架中使用的能力。以前版本的 MVC 已經(jīng)提供了 Service Location 和依賴注入的機(jī)會(huì),在 MVC3 中,我們正式提供了這種能力,并且為開發(fā)者開放了多種使用的機(jī)會(huì)。

  總體策略

  關(guān)于 Service Location 的最重要的部分就是它是可選的,這意味著如果你對(duì) Service Location 不感興趣,那么,你不需要被強(qiáng)制使用,你總是可以在不使用 Service Location 的情況下,調(diào)用自定義的函數(shù)。在以后加入新的 Service Location 的時(shí)候,也會(huì)保持向后的兼容性。

  當(dāng)使用注冊(cè)的 Service Location 的時(shí)候,依賴于具體的使用,MVC 一般將會(huì)使用下面三種策略之一:

  1. 定位一個(gè)唯一的注冊(cè)服務(wù)

  現(xiàn)在的 MVC 中使用的許多服務(wù)都注冊(cè)一個(gè)實(shí)例來(lái)提供服務(wù),例如,控制器工廠 Controller Factory,它實(shí)現(xiàn)了接口 IControllerFactory。對(duì)于整個(gè)應(yīng)用來(lái)說(shuō),只有一個(gè)控制器工廠實(shí)例。

  當(dāng) MVC 試圖使用單個(gè)的注冊(cè)服務(wù)的時(shí)候,它將會(huì)首先通過(guò) Service Locator 尋找時(shí)候存在一個(gè)注冊(cè)的服務(wù)實(shí)例,如果有,將使用這個(gè)服務(wù)實(shí)例,如果沒有,那么將會(huì)回退到?jīng)]有使用服務(wù)定位器時(shí)候注冊(cè)的單個(gè)實(shí)例。

  上面的處理順序意味著使用服務(wù)定位器的用戶不必?fù)?dān)心現(xiàn)存項(xiàng)目中 MVC 的默認(rèn)服務(wù)。因?yàn)楫?dāng)服務(wù)提供器不存在的時(shí)候,將會(huì)自動(dòng)使用原來(lái)注冊(cè)的服務(wù),這種潛力也意味著可以在兩個(gè)地方注冊(cè)自定義的服務(wù),但是只有通過(guò)服務(wù)器注冊(cè)的服務(wù)被使用。

  2. 定位多個(gè)注冊(cè)的服務(wù)

  在 MVC 中也有為一個(gè)服務(wù)注冊(cè)多個(gè)服務(wù)實(shí)例的地方,比如說(shuō),視圖引擎,視圖引擎實(shí)現(xiàn)了接口 IViewEngine,典型情況下,MVC 提供了注冊(cè)多個(gè)服務(wù)的注冊(cè)點(diǎn),也提供了 ViewEngines.Engines 來(lái)找到每一個(gè)視圖引擎,并確定其中之一可以提供服務(wù)。還有其他的類似的場(chǎng)合,比如, ModelValidatorProviders.Providers 。

  當(dāng) MVC 試圖使用這種具有多個(gè)服務(wù)實(shí)例的服務(wù)的時(shí)候,MVC 將會(huì)通過(guò)管理多個(gè)服務(wù)實(shí)現(xiàn)的 Facade 來(lái)完成,F(xiàn)acade 將會(huì)把通過(guò)靜態(tài)注冊(cè)的服務(wù)實(shí)例和通過(guò) Service Location 注冊(cè)的服務(wù)實(shí)例結(jié)合在一起來(lái)選擇合適的實(shí)現(xiàn)。在這里,服務(wù)的順序是很重要的,通常意味著通過(guò) Service Location 注冊(cè)的服務(wù)實(shí)例要優(yōu)先靜態(tài)注冊(cè)的實(shí)例。

  類似于單實(shí)例服務(wù)注冊(cè),這意味著對(duì)于存在默認(rèn)服務(wù)提供器的時(shí)候,不需要再通過(guò) Service Location 來(lái)注冊(cè)服務(wù),這也意味著對(duì)于注冊(cè)的多個(gè)服務(wù)來(lái)說(shuō),多數(shù)的容器也不必提供一個(gè)本地的排序函數(shù),因?yàn)槿绻樞蚴侵匾模涂赡苄枰?Service Location 的 API。

  3. 創(chuàng)建對(duì)象

  MVC 使用服務(wù)定位器最后的策略就是直接創(chuàng)建對(duì)象,這最好通過(guò)依賴注入的服務(wù)來(lái)實(shí)現(xiàn),我們將試圖通過(guò) Service Location 來(lái)創(chuàng)建對(duì)象,一個(gè)典型的例子就是控制器對(duì)象 Controller。

  當(dāng) MVC 試圖創(chuàng)建新的對(duì)象的時(shí)候,它將會(huì)請(qǐng)求服務(wù)定位器來(lái)創(chuàng)建這個(gè)對(duì)象,如果服務(wù)定位器不能完成這個(gè)任務(wù),那么,將會(huì)回退到 MVC2 的行為,通常意味著使用 Activator.CreateInstance 來(lái)創(chuàng)建。

  IDependencyResolver

  為了在 MVC3 中使用服務(wù)定位,在 MVC3 中提供了一個(gè)接口 IDependencyResolver 和一個(gè)新的類 DependencyResolver,

1 public interfac IDependencyResolver
2 {
3     object GetService( Type serviceType );
4     IEnumerable<object> GetServices( Type serviceType );
5 }

NET技術(shù)ASP.NET MVC3 Service Location,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 数字记忆法编码100| 金三角电影| 偷偷藏不住演员表| 麻豆视频观看| 2014年9月日历表查询| 林青霞离婚| 别董大古诗一首| 女同性视频| 乔治失踪的日子| 探究事物的本质的读后感想| jamie dornan| 广西百色地图| free hd xxxx moms movie777| 锤娜丽莎电视剧| 周杰伦雨下一整晚歌词| 欧美吻戏视频| 檀健次壁纸| 吴妍儿| 最爱电影完整版在线观看免费高清 | 囚徒电影深度解析| 1998年槟榔西施| 32步简单舞步完整版| 恐龙图片大全大图| 永远的经典影片永远的| 去分母解一元一次方程100道及答案 | 女友的男朋友| tvb直播| 土壤动植物的乐园教学反思| 电影白洁少妇完整版| 香港之夜免费播放国语| 少年歌行第三季| 暖男电视剧30集全集免费| 猫小帅三十六计| 女同性视频| 美国电影《黑吃黑》在线观看| 爱情与灵药 电影| 星速| cgtn英语频道在线直播观看| 郑荣植个人资料| 柳堡的故事演员表| 植田圭辅|