public void RegisterExtension(IXmlExtension extension) { if (extension == null) { throw new ArgumentNullException(); } else { extensions.Add(extension); } }
public XElement GenerateExtensionElement(IXmlExtension extension) { Type extType = extension.GetType(); string type = extType.ToString(); Assembly assembly = Assembly.GetAssembly(extType); XElement extNode = new XElement(extNames.ExtensionElement, new XAttribute(extNames.ExtensionPreferredDeserializerAttribute, type), new XAttribute(extNames.ExtensionDezerializerAssemblyAttribute, assembly.GetName().Name + ".dll")); extension.WriteObject(extNode); return(extNode); }
public ExtendedGraph Load(XDocument xdoc) { Graph graph = GraphXmlDeserializer.LoadFromXml(xdoc); ExtensionXmlNames extNames = new ExtensionXmlNames(); List <IXmlExtension> extensions = new List <IXmlExtension>(); if (xdoc != null) { XElement extensionList = xdoc.Root.Element(extNames.ExtensionListElement); foreach (XElement extensionNode in extensionList.Elements(extNames.ExtensionElement)) { string typeName = extensionNode.Attribute(extNames.ExtensionPreferredDeserializerAttribute)?.Value; string assemblyName = extensionNode.Attribute(extNames.ExtensionDezerializerAssemblyAttribute)?.Value; if (String.IsNullOrEmpty(typeName) || String.IsNullOrEmpty(assemblyName)) { Debug.WriteLine($"Extension loading skipped. Parameters [{typeName}] and [{assemblyName}]"); continue; } Assembly assembly = Assembly.LoadFrom(assemblyName); if (assembly == null) { Debug.WriteLine($"Assembly [{assemblyName}] could not be loaded."); continue; } Type type = assembly.GetType(typeName); if (type == null) { Debug.WriteLine($"Type [{typeName}] does not exist in assembly [{assemblyName}]."); continue; } IXmlExtension extension = Activator.CreateInstance(type) as IXmlExtension; if (extension == null) { Debug.WriteLine($"Instance of type [{typeName}] could not be created as IXmlExtension."); continue; } extension.ReadObject(extensionNode); extensions.Add(extension); } return(new ExtendedGraph(graph, extensions)); } return(null); }