中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

ASP.NET MVC3 Service Location

  介紹

  ASP.NET MVC3 的一個(gè)重要的新特性就是允許注冊(cè)一個(gè)服務(wù)點(diǎn) Service Location,然后在框架中使用的能力。以前版本的 MVC 已經(jīng)提供了 Service Location 和依賴注入的機(jī)會(huì),在 MVC3 中,我們正式提供了這種能力,并且為開(kāi)發(fā)者開(kāi)放了多種使用的機(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í)例,如果沒(méi)有,那么將會(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ù)。還有其他的類(lèi)似的場(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í)例。

  類(lèi)似于單實(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è)新的類(lèi) 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)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产精品一级在线观看 | 欧美在线看片 | 日韩电影免费在线观看中文字幕 | 色婷婷综合久久久中文字幕 | 午夜日韩 | 午夜天堂精品久久久久 | 久久久久国产一级毛片高清网站 | 久久精品色欧美aⅴ一区二区 | 夜夜爽99久久国产综合精品女不卡 | 成人av在线播放 | 国产精品96久久久久久 | 在线播放国产一区二区三区 | 久久亚洲一区二区 | 欧美一区二区三区日韩 | 天堂av在线影院 | 久久精品视频12 | 欧美黄视频| 久久久久久久久毛片 | 亚洲欧洲在线观看视频 | 成人小视频在线免费观看 | 69av在线视频 | 一级在线观看 | 国产精品久久久久不卡 | 欧美jizzhd精品欧美巨大免费 | 亚洲精品久久久久久一区二区 | 亚洲精品粉嫩美女一区 | 欧美精品一区三区 | 国产精品久久久亚洲 | 精品视频在线播放 | 日韩无 | 黄色成人在线网站 | 成人免费视频 | 综合久久一区 | 国产一区二区三区久久久久久久久 | 亚洲网在线 | 国产在线观看 | 欧美黑人国产人伦爽爽爽 | 日本激情视频中文字幕 | 欧美激情精品久久久久久变态 | 一区二区精品视频 | 国产一区二区三区在线 |