-//\r
-// System.Web.Compilation.AspComponentFoundry\r
-//\r
-// Authors:\r
-// Gonzalo Paniagua Javier (gonzalo@ximian.com)\r
-//\r
-// (C) 2002,2003 Ximian, Inc (http://www.ximian.com)\r
-//\r
+//
+// System.Web.Compilation.AspComponentFoundry
+//
+// Authors:
+// Gonzalo Paniagua Javier (gonzalo@ximian.com)
+//
+// (C) 2002,2003 Ximian, Inc (http://www.ximian.com)
+//
//
// Permission is hereby granted, free of charge, to any person obtaining
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-using System;\r
-using System.Collections;\r
-using System.IO;\r
-using System.Reflection;\r
-\r
-namespace System.Web.Compilation\r
-{\r
- internal class AspComponentFoundry\r
- {\r
- private Hashtable foundries;\r
-\r
- public AspComponentFoundry ()\r
- {\r
+using System;
+using System.Collections;
+using System.IO;
+using System.Reflection;
+
+namespace System.Web.Compilation
+{
+ internal class AspComponentFoundry
+ {
+ private Hashtable foundries;
+
+ public AspComponentFoundry ()
+ {
foundries = new Hashtable (CaseInsensitiveHashCodeProvider.DefaultInvariant,
CaseInsensitiveComparer.DefaultInvariant);
-\r
- Assembly sw = typeof (AspComponentFoundry).Assembly;\r
- RegisterFoundry ("asp", sw, "System.Web.UI.WebControls");\r
- RegisterFoundry ("", "object", typeof (System.Web.UI.ObjectTag));\r
- }\r
-\r
- public Type GetComponentType (string foundryName, string tag)\r
- {\r
- Foundry foundry = foundries [foundryName] as Foundry;\r
- if (foundry == null)\r
- return null;\r
-\r
- return foundry.GetType (tag);\r
- }\r
-\r
- public void RegisterFoundry (string foundryName,\r
- Assembly assembly,\r
- string nameSpace)\r
- {\r
- AssemblyFoundry foundry = new AssemblyFoundry (assembly, nameSpace);\r
- InternalRegister (foundryName, foundry);\r
- }\r
-\r
- public void RegisterFoundry (string foundryName,\r
- string tagName,\r
- Type type)\r
- {\r
- TagNameFoundry foundry = new TagNameFoundry (tagName, type);\r
- InternalRegister (foundryName, foundry);\r
- }\r
-\r
- void InternalRegister (string foundryName, Foundry foundry)\r
- {\r
- object f = foundries [foundryName];\r
- if (f is CompoundFoundry) {\r
- ((CompoundFoundry) f).Add (foundry);\r
- } else if (f == null || (f is AssemblyFoundry && foundry is AssemblyFoundry)) {\r
- // If more than 1 namespace/assembly specified, the last one is used.\r
- foundries [foundryName] = foundry;\r
- } else if (f != null) {\r
- CompoundFoundry compound = new CompoundFoundry (foundryName);\r
- compound.Add ((Foundry) f);\r
- compound.Add (foundry);\r
- foundries [foundryName] = compound;\r
- }\r
- }\r
-\r
- public bool LookupFoundry (string foundryName)\r
- {\r
- return foundries.Contains (foundryName);\r
- }\r
-\r
- abstract class Foundry\r
- {\r
- public abstract Type GetType (string componentName);\r
- }\r
- \r
-\r
- class TagNameFoundry : Foundry\r
- {\r
- string tagName;\r
- Type type;\r
-\r
- public TagNameFoundry (string tagName, Type type)\r
- {\r
- this.tagName = tagName;\r
- this.type = type;\r
- }\r
-\r
- public override Type GetType (string componentName)\r
- {\r
- if (0 != String.Compare (componentName, tagName, true))\r
- return null;\r
- \r
- return type;\r
- }\r
-\r
- public string TagName {\r
- get { return tagName; }\r
- }\r
- }\r
-\r
- class AssemblyFoundry : Foundry\r
- {\r
- string nameSpace;\r
- Assembly assembly;\r
-\r
- public AssemblyFoundry (Assembly assembly, string nameSpace)\r
- {\r
- this.assembly = assembly;\r
- this.nameSpace = nameSpace;\r
- }\r
-\r
- public override Type GetType (string componentName)\r
- {\r
- return assembly.GetType (nameSpace + "." + componentName, true, true);\r
- }\r
- }\r
-\r
- class CompoundFoundry : Foundry\r
- {\r
- AssemblyFoundry assemblyFoundry;\r
- Hashtable tagnames;\r
- string tagPrefix;\r
-\r
- public CompoundFoundry (string tagPrefix)\r
- {\r
- this.tagPrefix = tagPrefix;\r
+
+ Assembly sw = typeof (AspComponentFoundry).Assembly;
+ RegisterFoundry ("asp", sw, "System.Web.UI.WebControls");
+ RegisterFoundry ("", "object", typeof (System.Web.UI.ObjectTag));
+ }
+
+ public Type GetComponentType (string foundryName, string tag)
+ {
+ Foundry foundry = foundries [foundryName] as Foundry;
+ if (foundry == null)
+ return null;
+
+ return foundry.GetType (tag);
+ }
+
+ public void RegisterFoundry (string foundryName,
+ Assembly assembly,
+ string nameSpace)
+ {
+ AssemblyFoundry foundry = new AssemblyFoundry (assembly, nameSpace);
+ InternalRegister (foundryName, foundry);
+ }
+
+ public void RegisterFoundry (string foundryName,
+ string tagName,
+ Type type)
+ {
+ TagNameFoundry foundry = new TagNameFoundry (tagName, type);
+ InternalRegister (foundryName, foundry);
+ }
+
+ void InternalRegister (string foundryName, Foundry foundry)
+ {
+ object f = foundries [foundryName];
+ if (f is CompoundFoundry) {
+ ((CompoundFoundry) f).Add (foundry);
+ } else if (f == null || (f is AssemblyFoundry && foundry is AssemblyFoundry)) {
+ // If more than 1 namespace/assembly specified, the last one is used.
+ foundries [foundryName] = foundry;
+ } else if (f != null) {
+ CompoundFoundry compound = new CompoundFoundry (foundryName);
+ compound.Add ((Foundry) f);
+ compound.Add (foundry);
+ foundries [foundryName] = compound;
+ }
+ }
+
+ public bool LookupFoundry (string foundryName)
+ {
+ return foundries.Contains (foundryName);
+ }
+
+ abstract class Foundry
+ {
+ public abstract Type GetType (string componentName);
+ }
+
+
+ class TagNameFoundry : Foundry
+ {
+ string tagName;
+ Type type;
+
+ public TagNameFoundry (string tagName, Type type)
+ {
+ this.tagName = tagName;
+ this.type = type;
+ }
+
+ public override Type GetType (string componentName)
+ {
+ if (0 != String.Compare (componentName, tagName, true))
+ return null;
+
+ return type;
+ }
+
+ public string TagName {
+ get { return tagName; }
+ }
+ }
+
+ class AssemblyFoundry : Foundry
+ {
+ string nameSpace;
+ Assembly assembly;
+
+ public AssemblyFoundry (Assembly assembly, string nameSpace)
+ {
+ this.assembly = assembly;
+ this.nameSpace = nameSpace;
+ }
+
+ public override Type GetType (string componentName)
+ {
+ return assembly.GetType (nameSpace + "." + componentName, true, true);
+ }
+ }
+
+ class CompoundFoundry : Foundry
+ {
+ AssemblyFoundry assemblyFoundry;
+ Hashtable tagnames;
+ string tagPrefix;
+
+ public CompoundFoundry (string tagPrefix)
+ {
+ this.tagPrefix = tagPrefix;
tagnames = new Hashtable (CaseInsensitiveHashCodeProvider.DefaultInvariant,
CaseInsensitiveComparer.DefaultInvariant);
- }\r
-\r
- public void Add (Foundry foundry)\r
- {\r
- if (foundry is AssemblyFoundry) {\r
- assemblyFoundry = (AssemblyFoundry) foundry;\r
- return;\r
- }\r
- \r
- TagNameFoundry tn = (TagNameFoundry) foundry;\r
- string tagName = tn.TagName;\r
- if (tagnames.Contains (tagName)) {\r
- string msg = String.Format ("{0}:{1} already registered.", tagPrefix, tagName);\r
- throw new ApplicationException (msg);\r
- }\r
- tagnames.Add (tagName, foundry);\r
- }\r
-\r
- public override Type GetType (string componentName)\r
- {\r
- Type type = null;\r
- if (assemblyFoundry != null) {\r
- try {\r
- type = assemblyFoundry.GetType (componentName);\r
- return type;\r
- } catch { }\r
- }\r
-\r
- Foundry foundry = tagnames [componentName] as Foundry;\r
- if (foundry == null) {\r
- string msg = String.Format ("Type {0} not registered for prefix {1}",\r
- componentName, tagPrefix);\r
- throw new ApplicationException (msg);\r
- }\r
-\r
- return foundry.GetType (componentName);\r
- }\r
- }\r
- }\r
-}\r
-\r
+ }
+
+ public void Add (Foundry foundry)
+ {
+ if (foundry is AssemblyFoundry) {
+ assemblyFoundry = (AssemblyFoundry) foundry;
+ return;
+ }
+
+ TagNameFoundry tn = (TagNameFoundry) foundry;
+ string tagName = tn.TagName;
+ if (tagnames.Contains (tagName)) {
+ string msg = String.Format ("{0}:{1} already registered.", tagPrefix, tagName);
+ throw new ApplicationException (msg);
+ }
+ tagnames.Add (tagName, foundry);
+ }
+
+ public override Type GetType (string componentName)
+ {
+ Type type = null;
+ Foundry foundry = tagnames [componentName] as Foundry;
+ if (foundry != null)
+ return foundry.GetType (componentName);
+
+ if (assemblyFoundry != null) {
+ try {
+ type = assemblyFoundry.GetType (componentName);
+ return type;
+ } catch { }
+ }
+
+ string msg = String.Format ("Type {0} not registered for prefix {1}",
+ componentName, tagPrefix);
+ throw new ApplicationException (msg);
+ }
+ }
+ }
+}
+