/// <summary> /// /// </summary> /// <param name="prefix"></param> /// <param name="tag"></param> /// <param name="ns"></param> /// <returns></returns> public static Element GetElement(string prefix, string tag, string ns) { if (ns == null) ns = ""; ElementType et = new ElementType(tag, ns); System.Type t = (System.Type) m_table[et.ToString()]; Element ret; if (t != null) ret = (Element) System.Activator.CreateInstance(t); else ret = new Element(tag); ret.Prefix = prefix; if (ns!="") ret.Namespace = ns; return ret; }
/// <summary> /// Adds new Element Types to the Hashtable /// Use this function also to register your own created Elements. /// If a element is already registered it gets overwritten. This behaviour is also useful if you you want to overwrite /// classes and add your own derived classes to the factory. /// </summary> /// <param name="tag">FQN</param> /// <param name="ns"></param> /// <param name="t"></param> public static void AddElementType(string tag, string ns, System.Type t) { ElementType et = new ElementType(tag, ns); string key = et.ToString(); // added thread safety on a user request lock (m_table) { if (m_table.ContainsKey(key)) m_table[key] = t; else m_table.Add(et.ToString(), t); } }