AjaxSettingsSectionHandler.cs
上传用户:szgaoree
上传日期:2009-01-05
资源大小:74k
文件大小:4k
源码类别:

Ajax

开发平台:

C#

  1. /*
  2.  * MS 06-04-04 added DebugEnabled web.config property <debug enabled="true"/>
  3.  * MS 06-04-05 added oldStyle section in web.config
  4.  * MS 06-04-12 added urlNamespaceMapping/@useAssemblyQualifiedName
  5.  * 
  6.  * 
  7.  * 
  8.  * 
  9.  */
  10. using System;
  11. using System.Xml;
  12. using System.Configuration;
  13. namespace AjaxPro
  14. {
  15. internal class AjaxSettingsSectionHandler : IConfigurationSectionHandler
  16. {
  17. #region IConfigurationSectionHandler Members
  18. public object Create(object parent, object configContext, System.Xml.XmlNode section)
  19. {
  20. AjaxSettings settings = new AjaxSettings();
  21. foreach(XmlNode n in section.ChildNodes)
  22. {
  23. if(n.Name == "coreScript")
  24. {
  25. if(n.InnerText != null && n.InnerText.Length > 0) 
  26. {
  27. settings.ScriptReplacements.Add("core", n.InnerText);
  28. }
  29. }
  30. else if(n.Name == "scriptReplacements")
  31. {
  32. foreach(XmlNode file in n.SelectNodes("file"))
  33. {
  34. string name = "";
  35. string path = "";
  36. if(file.Attributes["name"] != null)
  37. {
  38. name = file.Attributes["name"].InnerText;
  39. if(file.Attributes["path"] != null) path = file.Attributes["path"].InnerText;
  40. if(settings.ScriptReplacements.ContainsKey(name))
  41. settings.ScriptReplacements[name] = path;
  42. else
  43. settings.ScriptReplacements.Add(name, path);
  44. }
  45. }
  46. }
  47. else if(n.Name == "urlNamespaceMappings")
  48. {
  49. settings.UseAssemblyQualifiedName = n.SelectSingleNode("@useAssemblyQualifiedName[.='true']") != null;
  50. XmlNode ns, url;
  51. foreach(XmlNode e in n.SelectNodes("add"))
  52. {
  53. ns = e.SelectSingleNode("@type");
  54. url = e.SelectSingleNode("@path");
  55. if(ns == null || ns.InnerText == "" || url == null || url.InnerText == "")
  56. continue;
  57. if(settings.UrlNamespaceMappings.Contains(url.InnerText))
  58. throw new Exception("Duplicate namespace mapping '" + url.InnerText + "'.");
  59. settings.UrlNamespaceMappings.Add(url.InnerText, ns.InnerText);
  60. }
  61. }
  62. else if(n.Name == "jsonConverters")
  63. {
  64. XmlNodeList jsonConverters = n.SelectNodes("add");
  65. foreach(XmlNode j in jsonConverters)
  66. {
  67. XmlNode t = j.SelectSingleNode("@type");
  68. if(t == null)
  69. continue;
  70. Type type = Type.GetType(t.InnerText);
  71. if(type == null)
  72. {
  73. // throw new ArgumentException("Could not find type " + t.InnerText + ".");
  74.                             continue;
  75. }
  76.                         if (!typeof(IJavaScriptConverter).IsAssignableFrom(type))
  77.                         {
  78.                             // throw new ArgumentException("Type " + t.InnerText + " does not inherit from JavaScriptObjectConverter.");
  79.                             continue;
  80.                         }
  81. IJavaScriptConverter c = (IJavaScriptConverter)Activator.CreateInstance(type);
  82. c.Initialize();
  83. settings.JavaScriptConverters.Add(c);
  84. }
  85. }
  86. else if(n.Name == "encryption")
  87. {
  88. string cryptType = n.SelectSingleNode("@cryptType") != null ? n.SelectSingleNode("@cryptType").InnerText : null;
  89. string keyType = n.SelectSingleNode("@keyType") != null ? n.SelectSingleNode("@keyType").InnerText : null;
  90. if(cryptType == null || keyType == null)
  91. continue;
  92. AjaxEncryption enc = new AjaxEncryption(cryptType, keyType);
  93. if(!enc.Init())
  94. throw new Exception("Ajax.NET Professional encryption configuration failed.");
  95. settings.Encryption = enc;
  96. }
  97. else if(n.Name == "token")
  98. {
  99. settings.TokenEnabled = n.SelectSingleNode("@enabled") != null && n.SelectSingleNode("@enabled").InnerText == "true";
  100. settings.TokenSitePassword = n.SelectSingleNode("@sitePassword") != null ? n.SelectSingleNode("@sitePassword").InnerText : settings.TokenSitePassword;
  101. }
  102. else if (n.Name == "debug")
  103. {
  104. if (n.SelectSingleNode("@enabled") != null && n.SelectSingleNode("@enabled").InnerText == "true")
  105. settings.DebugEnabled = true;
  106. }
  107. else if (n.Name == "oldStyle")
  108. {
  109. if (n.SelectSingleNode("objectExtendPrototype") != null)
  110. {
  111. if (!settings.OldStyle.Contains("objectExtendPrototype"))
  112. settings.OldStyle.Add("objectExtendPrototype");
  113. }
  114. }
  115. }
  116. return settings;
  117. }
  118. #endregion
  119. }
  120. }