成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

一、配置文件的結構

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

  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如下所示,結構比較清晰。不過在這里有幾點需要強調:

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

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

 (3)對于一些枚舉,或者限定在某個列表范圍內固定的值,通過<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> 

三、應用XSD以獲得職能感知的支持

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

【編輯推薦】

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

2022-06-13 14:31:02

資源調度鴻蒙

2023-04-26 15:36:51

WPA鴻蒙

2009-08-21 15:38:45

ControllerF

2022-07-31 23:46:57

人工智能語言模型感知力

2009-11-26 10:09:46

VS2005智能感知

2011-03-17 09:45:01

Spring

2024-01-08 08:30:05

光標圖形編輯器開發游標

2015-01-14 15:06:48

定義相機

2009-09-13 18:58:07

自定義LINQ提供器

2021-01-07 05:24:38

SpringbootSpringBanner

2022-10-21 15:31:31

物聯網智能建筑監控

2022-09-23 07:33:04

Springzookeeper配置

2022-06-06 09:01:16

SwiftUI自定義導航

2010-10-25 16:05:07

oracle自定義函數

2020-04-17 11:06:49

IO設備

2023-08-31 22:53:33

IDE工具窗口

2021-01-06 05:25:56

項目Springboot應用

2010-11-16 13:21:08

Oracle命令行
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 福利精品 | 91精品久久久久久久久中文字幕 | 亚洲精品大片 | 精品视频一区二区三区在线观看 | 免费一级欧美在线观看视频 | 欧美精品成人一区二区三区四区 | 国产午夜精品一区二区三区四区 | 久热久热 | www日本高清 | 色综合视频 | 香蕉一区 | 日韩av资源站 | 成人精品区 | 91超碰caoporn97人人 | 美女在线一区二区 | 懂色中文一区二区三区在线视频 | 国产综合视频 | 日韩视频一区在线观看 | 中文字幕 欧美 日韩 | 亚洲电影一区二区三区 | 亚洲欧美一区二区在线观看 | 九九激情视频 | 亚洲精品国产综合区久久久久久久 | 国产一区二区美女 | 99视频免费看 | 中文字幕中文字幕 | 亚洲成人一区二区三区 | 中文字幕av网 | 福利网址 | 欧美精品中文字幕久久二区 | 国产目拍亚洲精品99久久精品 | 99视频| 97国产精品视频人人做人人爱 | 国产日韩欧美一区二区 | 黄色国产 | 黄a免费看 | 久草.com | 久久亚洲一区二区三区四区 | 国产精品国产馆在线真实露脸 | 亚洲自拍偷拍视频 | 91精品国产综合久久久密闭 |