欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

微軟企業(yè)庫(kù)4.1學(xué)習(xí)筆記(十二)中間人Providers

系統(tǒng) 1653 0

  一、Provider

  在.NET frameword中每一個(gè)provider都是一段代碼的中間人,通過(guò)它,你的應(yīng)用可以連接到一個(gè)服務(wù)或者是數(shù)據(jù)源,可以獲取或者是修改服務(wù)和數(shù)據(jù)源的數(shù)據(jù)。在企業(yè)庫(kù)中包含很多的providers。另外,你也可以創(chuàng)建自己的provider,在你的應(yīng)用中滿足特殊的需求。

  一個(gè)provider type定義了和一個(gè)模塊相關(guān)的功能的接口,一個(gè)provider是一個(gè)provider type的實(shí)現(xiàn)。每一個(gè)模塊中,對(duì)于一個(gè)provider type,都實(shí)現(xiàn)了很多的provider。也可以為模塊添加自定義的provider。

  通過(guò)特殊的實(shí)現(xiàn)來(lái)分離模塊的功能,可以達(dá)到下面的目標(biāo):

  •   變化性,這樣可以根據(jù)應(yīng)用的需求,解耦相同功能的多個(gè)實(shí)現(xiàn)。
  •   擴(kuò)展性,允許你在某些強(qiáng)制實(shí)現(xiàn)的情況下使用模塊。例如,應(yīng)用在特殊的環(huán)境中,要求滿足一種特殊的加密算法。
  •   封裝性,使用provider,功能不再是模塊的一部分,可以被代替和升級(jí),而不對(duì)模塊的其他部分有影響。
  •   跨環(huán)境的輕便型,你可以在新環(huán)境中部署模塊,使用為這個(gè)環(huán)境編寫的provider。你也可以編寫一個(gè)provider,運(yùn)行在一個(gè)環(huán)境中,卻模擬另外一個(gè)環(huán)境。
  •   使得模塊之間的聯(lián)系最小化,如果一個(gè)模塊依賴于另一個(gè)模塊,可以將這種依賴封裝在provider中,一個(gè)模塊更新之后,如果使用provider,它依賴的模塊不用更新。例如,異常處理模塊,依賴于日志模塊來(lái)記錄異常信息。一個(gè)新版本的日志模塊需要一個(gè)新的日志provider,但是異常處理模塊可以不用更新。

  二、設(shè)計(jì)時(shí)配置

  所有的模塊對(duì)于配置節(jié)中都包括運(yùn)行時(shí)支持和設(shè)計(jì)時(shí)支持。運(yùn)行時(shí)支持包括配置中的類,在模塊加載的時(shí)候使用配置中的類。從配置中讀取信息,給模塊返回包含在配置中的對(duì)象。

  設(shè)計(jì)時(shí)支持包含一些類,這些類使你可以用配置工具改變配置信息。

  下面的圖中可以看出運(yùn)行時(shí)支持和設(shè)計(jì)時(shí)支持的關(guān)系

微軟企業(yè)庫(kù)4.1學(xué)習(xí)筆記(十二)中間人Providers,設(shè)計(jì)時(shí)支持Design-Time Configuration和儀表盤Instrumentation

?

  簡(jiǎn)單的來(lái)所運(yùn)行時(shí)支持的類,使得你可以在運(yùn)行的時(shí)候利用配置節(jié)中的信息動(dòng)態(tài)創(chuàng)建對(duì)象或者是其他的功能;設(shè)計(jì)時(shí)支持的類,使得你可以在設(shè)計(jì)的時(shí)候使用可視化的界面來(lái)設(shè)置配置節(jié)中的信息,不用手寫xml配置節(jié)了。

  設(shè)計(jì)時(shí)的類依賴于運(yùn)行時(shí)的類,因?yàn)橥ㄟ^(guò)工具修改配置之后,需要保存,這時(shí)候就需要調(diào)用運(yùn)行時(shí)的類將配置保存起來(lái)。運(yùn)行時(shí)的類不依賴于設(shè)計(jì)時(shí)的類。每一個(gè)模塊的設(shè)計(jì)時(shí)支持用的類都是單獨(dú)的程序集。例如,Microsoft.Practices.EnterpriseLibrary.Security.Cache.Configuration.Design.dll,都是包含.Design的。這些程序集在你的應(yīng)用運(yùn)行的時(shí)候不需要他們,但是在你使用配置工具的時(shí)候就需要他們了。

  三、儀表盤

  在企業(yè)庫(kù)中,激發(fā)事件的代碼,和激發(fā)事件之后指定應(yīng)該發(fā)生那些行為的代碼是分開(kāi)的。激發(fā)事件的代碼和provider有關(guān)系,對(duì)事件作出響應(yīng)的代碼則和listener代碼有關(guān)。這種分離允許你在事件發(fā)生的時(shí)候改變行為,而不用重新編譯provider代碼。但是,重新編譯listener還是需要的。

  在你感興趣的東西發(fā)生的時(shí)候會(huì)激活一些事件,例如連接數(shù)據(jù)庫(kù),記錄日志。激活事件會(huì)在代碼運(yùn)行的時(shí)候利用反射調(diào)用相關(guān)的listener。listener決定了在發(fā)生事件的時(shí)候,會(huì)有那些行為,例如,寫日志的時(shí)候,可以記錄寫日志事件,或者是增加計(jì)數(shù)器。沒(méi)有l(wèi)istener的模塊也可以正常運(yùn)行。

  3.1使用特性Attribute

  你可以用下面的特性,來(lái)給應(yīng)用添加listener和instrument

  •   InstrumentationListener
  •   InstrumentationProvider
  •   InstrumentationConsumer

  InstrumentationListener特性出現(xiàn)在provider類的上面,告訴它初始化了那一個(gè)listener。InstrumentationProvider特性用在provider類的事件上面。InstrumentationConsumer特性用在listener類的事件處理方法上面,標(biāo)識(shí)的名稱必須和InstrumentationProvider標(biāo)識(shí)的名稱相同。

  下面是一段示例代碼

?

代碼
public ? class ?MyListener
????{
????????
public ?MyListener?( string ?instanceName, bool ?a, bool ?b, bool ?c){}
????????[InstrumentationConsumerAttribute?(
" DbConnect " )]
????????
public ? void ?ConnectObserved( object ?sender,EventArgs?e)
????????{
????????????Console?.WriteLine?(
" I?saw?a?database?connect. " );
????????}
????}
????[InstrumentationListener?(
typeof ?(MyListener?))]
????
public ? class ?MyApplication
????{
????????[InstrumentationProvider(
" DbConnect " )]
????????
public ? event ?EventHandler? < EventArgs? > ?OnDbConnect;
????}

?

  MyApplication就是一個(gè)provider,OnDbConnect是provider的一個(gè)事件,MyListener中的ConnectObserved就是響應(yīng)OnDbConnect事件的處理代碼。

  當(dāng)系統(tǒng)初始化MyApplication類的時(shí)候,會(huì)檢查特性中是否存在一個(gè)MyListener類型的listener,如果存在,也會(huì)初始化一個(gè)MyListener。然后會(huì)檢查MyApplication中所有的事件,查看那些被標(biāo)識(shí)了InstrumentationProvider特性。同時(shí)也會(huì)在MyListener中查看標(biāo)有InstrumentationConsumer特性的,相同名稱的方法。

  3.2為組件提供儀表功能

  一個(gè)應(yīng)用會(huì)包含很多的組件,例如數(shù)據(jù)庫(kù)組件。在這時(shí)候,可能需要儀表的不是應(yīng)用本身,而是這個(gè)組件。為組件實(shí)現(xiàn)儀表功能,要求你的應(yīng)用實(shí)現(xiàn)IInstrumentationEventProvider接口。下面的示例中,MyApplication就是一個(gè)應(yīng)用。

?

代碼
public ? class ?MyListener
????{
????????
public ?MyListener?( string ?instanceName, bool ?a, bool ?b, bool ?c){}
????????[InstrumentationConsumerAttribute?(
" DbConnect " )]
????????
public ? void ?ConnectObserved( object ?sender,EventArgs?e)
????????{
????????????Console?.WriteLine?(
" I?saw?a?database?connect. " );
????????}
????}
????
public ? class ?MyApplication:IInstrumentationEventProvider?
????{
????????
private ?MyInstrumentationProvider?instrumentationProvider =
????????????
new ?MyInstrumentationProvider?();
????????
public ? object ?GetInstrumentationEventProvider()
????????{
????????????
return ?instrumentationProvider?;
????????}
????}
????[InstrumentationListener?(
typeof ?(MyListener?))]
????
public ? class ?MyInstrumentationProvider
????{
????????[InstrumentationProvider(
" DbConnect " )]
????????
public ? event ?EventHandler? < EventArgs > ?OnDbConnect;
????????
public ? bool ?IsWired
????????{
????????????
get { return ?OnDbConnect? != null ;}
????????}
????????
????}

?  通常系統(tǒng)會(huì)從MyApplication類的第一行開(kāi)始查找InstrumentationListener特性。但是,在上面的例子中,沒(méi)有這個(gè)特性。因此,當(dāng)系統(tǒng)看到IInstrumentationEventProvider接口的時(shí)候,會(huì)執(zhí)行GetInstrumentationEventProvider方法,查找方法返回類型的InstrumentationListener特性,然后查找InstrumentationProvider特性。

  3.3安裝儀表盤功能

  在listener類中的儀表盤會(huì)添加HasInstallableResources特性。下面是一段代碼示例。

?

代碼

????[HasInstallableResources?]
????[PerformanceCountersDefinitionAttribute?(
" Enterprise?Library?Data?Counters " ,
?????????????????????????????????????????????
" CounterCategoryHelpResourceName " )]
????
public ? class ?DataInstrumentationListener:InstrumentationListener?
????{
????????[PerformanceCounter?(
" Connections?Opend/sec " , " ConnectionOpenedCounterHelpResource " ,
?????????????????????????????System.Diagnostics.PerformanceCounterType?.RateOfCountsPerSecond32?)]
????????EnterpriseLibraryPerformanceCounter??connectionOpenedCounter;
????????
????}

?

?

?

?

  未完待續(xù)。。。。。。。。。。。。。。。。。。。。。

微軟企業(yè)庫(kù)4.1學(xué)習(xí)筆記(十二)中間人Providers,設(shè)計(jì)時(shí)支持Design-Time Configuration和儀表盤Instrumentation


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 性夜黄a爽爽免费视频国产 尤物tv在线 | 久久一本 | 欧美十区 | 国产精品玖玖玖在线观看 | 欧美91精品国产自产 | 国产在线精彩视频 | 午夜视频在线观看网站 | 中文字幕国产一区 | 国产精品日本欧美一区二区 | 99色综合| 欧美二区三区 | 日本VA在线视频播放 | 91青青青国产在观免费影视 | 精品a级片 | 亚洲欧美国产精品久久久久久久 | 亚洲呦呦系列视频 | 在线观看亚洲网站 | 在线二区 | 少妇特黄A片一区二区三区免费看 | 色综合亚洲天天综合网站 | 色中色在线视频 | 色欧美亚洲 | 精品无人区乱码一区二区三区手机 | 偷拍免费视频 | 五月综合激情婷婷六月色窝 | 欧美理伦 | 黄色激情毛片 | 国产电影一区二区三区 | 亚洲精品成人a | 午夜性刺激在线观看视频 | 天堂动漫 | www.天天色.com| 三及片在线观看 | 久久一区二区三区免费播放 | 天堂av资源 | naruto henta| 国产精品秒播无毒不卡 | 91亚瑟视频| 色秀视频在线观看全部 | 婷婷精品 | 成年视频网站免费观看 |