亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統(tǒng) 1574 0

  一、Provider

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

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

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

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

  二、設(shè)計時配置

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

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

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

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

?

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

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

  三、儀表盤

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

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

  3.1使用特性Attribute

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

  •   InstrumentationListener
  •   InstrumentationProvider
  •   InstrumentationConsumer

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

  下面是一段示例代碼

?

代碼
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就是一個provider,OnDbConnect是provider的一個事件,MyListener中的ConnectObserved就是響應(yīng)OnDbConnect事件的處理代碼。

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

  3.2為組件提供儀表功能

  一個應(yīng)用會包含很多的組件,例如數(shù)據(jù)庫組件。在這時候,可能需要儀表的不是應(yīng)用本身,而是這個組件。為組件實(shí)現(xiàn)儀表功能,要求你的應(yīng)用實(shí)現(xiàn)IInstrumentationEventProvider接口。下面的示例中,MyApplication就是一個應(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)會從MyApplication類的第一行開始查找InstrumentationListener特性。但是,在上面的例子中,沒有這個特性。因此,當(dāng)系統(tǒng)看到IInstrumentationEventProvider接口的時候,會執(zhí)行GetInstrumentationEventProvider方法,查找方法返回類型的InstrumentationListener特性,然后查找InstrumentationProvider特性。

  3.3安裝儀表盤功能

  在listener類中的儀表盤會添加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è)庫4.1學(xué)習(xí)筆記(十二)中間人Providers,設(shè)計時支持Design-Time Configuration和儀表盤Instrumentation


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品九九热 | 亚洲一级免费毛片 | 九九99 | 免费毛片播放 | 看免费黄色一级视频 | 欧美视频在线观看一区二区 | 久久福利小视频 | 精品免费久久久久久久 | 中文国产成人久久精品小说 | 欧美日韩中文视频 | 成人免费aa在线观看 | 国产亚洲精品久久久久久久网站 | 九色福利视频 | 成人私拍福利视频在线 | 日日干日日草 | 国产免费青青青免费视频观看 | 成人亚洲性情网站www在线观看 | 国产免费一区二区三区在线 | 亚洲国产日韩a在线亚洲 | 福利社看片 | 阿v天堂2017| 免费夜色污私人影院网站 | 中文字幕在线看视频一区二区三区 | 超乳w真性中出し冲田杏梨101 | 久久精品23 | 毛片免费全部免费观看 | 日韩99在线 | 亚洲视频在线免费 | 亚洲综合综合在线 | 免费观看一级成人毛片软件 | 亚洲 欧美 日韩在线综合福利 | 欧美日韩第三页 | 青草视频网站 | 9999热视频| 久久精品女人天堂 | 国产精品一在线观看 | 亚洲精品mv在线观看 | 中文精品视频一区二区在线观看 | 99久久精品免费观看国产 | 亚洲成人视 | 2021最新国产成人精品免费 |