自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為自定義配置的編輯提供“智能感知”的支持

開發(fā) 后端
當(dāng)我們在設(shè)計一個框架的時候,必然會涉及一系列的配置。為了讓使用者更好地使用你提供的框架,讓他們能夠容易地維護(hù)這些配置是一項基本的要求。來看本文。

當(dāng)我們在設(shè)計一個框架的時候,必然會涉及一系列的配置。為了讓使用者更好地使用你提供的框架,讓他們能夠容易地維護(hù)這些配置是一項基本的要求。對于一些配置過于復(fù)雜的框架,比如EnterLib,比如WCF,往往會提供一個配置的工具。但是,不過這樣的配置工具是否提供,手工編譯配置文件是在所難免的。如果在通過VS編輯配置的時候,能夠提供智能感知和提示性描述的支持,這無疑會使配置的編輯變得非常的容易。這里是一個簡單的例子。

一、配置文件的結(jié)構(gòu)

假設(shè)我們設(shè)計一個MessageGenerator的組件,用于生成程序我們需要的文本消息,比如驗證控件的驗證消息,異常的消息等。消息的內(nèi)容根據(jù)需要可以保存在數(shù)據(jù)庫中或者是XML文件中,并且采用不同模式(粒度)的緩存(None、Single、Category和All)。我們采用插件式的設(shè)計,定義一個IMessageProvider接口用于從數(shù)據(jù)源中獲取消息列表,兩個具體的DbMessageProvider和XmlMessageProvider實現(xiàn)了這個接口。具體采用那個MessageProvider,通過配置來決定(defaultProvider),配置結(jié)構(gòu)如下所示:

  1. <?xml version="1.0"?>   
  2. <configuration>   
  3. <configSections>   
  4. <section name="artech.messages"type="Artech.Messages.MessagesSetting, Artech.Messages"/>   
  5. </configSections>   
  6. <artech.messages defaultProvider="DbProvider"cachingMode="None">   
  7. <providers>   
  8. <add name="DbProvider"type="Artech.Messages.DbMessageProvider, Artech.Messages"   
  9. connectionString="" applicationName="" />   
  10. <add name="XmlProvider"type="Artech.Messages.XmlMessageProvider, Artech.Messages" source="~/Messages.xml"/>   
  11. </providers>   
  12. </artech.messages>   
  13. </configuration> 

二、為配置定義XSD

為了在VS中編輯配置文件的時候獲得智能感知的支持,我們需要為它定義XSD。整個XSD如下所示,結(jié)構(gòu)比較清晰。不過在這里有幾點需要強(qiáng)調(diào):

(1)我們通過采用<xs:documentation>節(jié)點定義一些表述性的文字。當(dāng)你通過VS編輯配置文件的時候,針對當(dāng)前配置節(jié)點定義的這些文字將會以Tips的形式顯示出來;

 (2)在定義MessageProvider的schema的時候,我們將針對所有預(yù)定義MessageProvider的配置屬性都定義出來(DbMessageProvider的applicationName和connectionStringName,以及XmlMessageProvider的source)。如果這些配置屬性不是對于所有的MessageProvider都是必須的(比如name和type),將它們定義成可選屬性;

 (3)對于一些枚舉,或者限定在某個列表范圍內(nèi)固定的值,通過<xs:restriction>/<xs:enumeration>來定義,比如這里使用到的CachingMode。

  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >   
  3. <xs:element name="artech.messages"type="MessagesConfigSection"/>   
  4. <!--MessagesConfigSection-->   
  5. <xs:complexType name="MessagesConfigSection">   
  6. <xs:choice minOccurs="0" maxOccurs="unbounded">   
  7. <xs:element name="providers" minOccurs="1"maxOccurs="1"> <xs:complexType>   
  8. <xs:sequence>   
  9. <xs:element name="add" type="MessageProvider"minOccurs="1" maxOccurs="unbounded"/>   
  10. </xs:sequence>   
  11. </xs:complexType>   
  12. </xs:element>   
  13. </xs:choice>   
  14. <xs:attribute name="defaultProvider" type="xs:string"use="required">   
  15. <xs:annotation>   
  16. <xs:documentation>The configuration name of the default essageProvider.</xs:documentation>   
  17. </xs:annotation>   
  18. </xs:attribute>   
  19. <xs:attribute name="cachingMode" type="CachingMode" use="optional">   
  20. <xs:annotation>   
  21. <xs:documentation>The caching mode (None, Single, Category, All).</xs:documentation>   
  22. </xs:annotation>   
  23. </xs:attribute>   
  24. </xs:complexType>   
  25. <!--MessageProvider-->   
  26. <xs:complexType name="MessageProvider">   
  27. <xs:attribute name="name" use="required">   
  28. <xs:annotation>   
  29. <xs:documentation>A friendly name of MessageProvider.</xs:documentation>   
  30. </xs:annotation>   
  31. </xs:attribute>   
  32. <xs:attribute name="type" type="MessageProviderTypes" use="required">   
  33. <xs:annotation>   
  34. <xs:documentation>The assembly qualified name of the MessageProvider type.</xs:documentation>   
  35. </xs:annotation>   
  36. </xs:attribute>   
  37. <xs:attribute name="connectionString" type="xs:string" use="optional">   
  38. <xs:annotation>   
  39. <xs:documentation>[DbMessageProvider]The connection string configuration name.</xs:documentation> 
  40. </xs:annotation>   
  41. </xs:attribute>   
  42. <xs:attribute name="applicationName" type="xs:string" use="optional">   
  43. <xs:annotation>   
  44. <xs:documentation>[DbMessageProvider]The name of application.</xs:documentation>   
  45. </xs:annotation>   
  46. </xs:attribute>   
  47. <xs:attribute name="source" type="xs:string" use="optional"> 
  48. <xs:annotation>   
  49. <xs:documentation>[XMLMessageProvider] The path of the XML file to store message entry list.</xs:documentation>   
  50. </xs:annotation>   
  51. </xs:attribute>   
  52. </xs:complexType>   
  53. <!--CachingMode-->   
  54. <xs:simpleType name="CachingMode">   
  55. <xs:restriction base="xs:string">   
  56. <xs:enumeration value="None"/>   
  57. <xs:enumeration value="Single"/>   
  58. <xs:enumeration value="Category"/>   
  59. <xs:enumeration value="All"/>   
  60. </xs:restriction> 
  61. </xs:simpleType>   
  62. <!--MessageProviderTypes-->   
  63. <xs:simpleType name="MessageProviderTypes">   
  64. <xs:restriction base="xs:string">   
  65. <xs:enumeration value="Artech.Messages.DbMessageProvider, Artech.Messages"/>   
  66. <xs:enumeration value="Artech.Messages.XmlMessageProvider, Artech.Messages"/>   
  67. </xs:restriction>   
  68. </xs:simpleType>   
  69. </xs:schema> 

三、應(yīng)用XSD以獲得職能感知的支持

如果這樣一個XSD已經(jīng)定義好,在對配置文件進(jìn)行編輯的時候,通過VS的菜單XML\Schemas打開XML Schemas對話框。點擊Add按鈕將這個XSD文件添加近來,并Use屬性設(shè)置成Use this schema。這樣你編譯配置文件的時候就可以獲得只能感知的支持了,配置將會變得非常的容易,即使對配置結(jié)構(gòu)不太了解的人也能根據(jù)智能感知和提示性的描述完成配置工作。

【編輯推薦】

  1. 14.3.7 其他自定義配置
  2. 淺談C#緩沖區(qū)溢出的秘密
  3. 巧解C#單例模式引起的自定義異常
  4. C#常用線程同步方法應(yīng)用場景和實現(xiàn)原理
責(zé)任編輯:于鐵 來源: 博客園
相關(guān)推薦

2022-06-13 14:31:02

資源調(diào)度鴻蒙

2023-04-26 15:36:51

WPA鴻蒙

2009-08-21 15:38:45

ControllerF

2011-03-17 09:45:01

Spring

2024-01-08 08:30:05

光標(biāo)圖形編輯器開發(fā)游標(biāo)

2009-11-26 10:09:46

VS2005智能感知

2015-01-14 15:06:48

定義相機(jī)

2022-07-31 23:46:57

人工智能語言模型感知力

2009-09-13 18:58:07

自定義LINQ提供器

2021-01-07 05:24:38

SpringbootSpringBanner

2022-09-23 07:33:04

Springzookeeper配置

2022-06-06 09:01:16

SwiftUI自定義導(dǎo)航

2010-10-25 16:05:07

oracle自定義函數(shù)

2015-02-12 15:33:43

微信SDK

2010-11-16 13:21:08

Oracle命令行

2021-01-06 05:25:56

項目Springboot應(yīng)用

2022-10-21 15:31:31

物聯(lián)網(wǎng)智能建筑監(jiān)控

2021-06-17 06:20:43

Linkerd Kustomize網(wǎng)絡(luò)技術(shù)
點贊
收藏

51CTO技術(shù)棧公眾號