Mercurial > repos > IBBoard
view Xml/XmlResourceResolver.cs @ 121:9131bc46903e default tip
* Add NamedStream wrapper class to support warfoundry:#419
author | IBBoard <dev@ibboard.co.uk> |
---|---|
date | Wed, 28 Nov 2012 20:21:40 +0000 |
parents | 780169621672 |
children |
line wrap: on
line source
using System; using System.Xml; using System.Reflection; using System.Collections.Generic; using System.IO; using System.Net; namespace IBBoard.Xml { public class XmlResourceResolver : XmlUrlResolver { private Assembly assm; private Dictionary<string, string> relativeToAbsoluteMap = new Dictionary<string, string>(); private Dictionary<string, string> absoluteToResourceMap = new Dictionary<string, string>(); public XmlResourceResolver(Assembly assembly) { assm = assembly; } public void AddMapping(string relativeUri, string absoluteUri, string resourceName) { relativeToAbsoluteMap.Add(relativeUri, absoluteUri); AddMapping(absoluteUri, resourceName); } public void AddMapping(string absoluteUri, string resourceName) { absoluteToResourceMap[absoluteUri] = resourceName; } public override Uri ResolveUri(Uri baseUri, string relativeUri) { Uri resolved; if (relativeToAbsoluteMap.ContainsKey(relativeUri)) { resolved = new Uri(relativeToAbsoluteMap[relativeUri], UriKind.Absolute); } else if (absoluteToResourceMap.ContainsKey(relativeUri)) { resolved = new Uri(relativeUri, UriKind.Absolute); } else { resolved = base.ResolveUri(baseUri, relativeUri); } return resolved; } public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn) { string absoluteUriString = absoluteUri == null ? null : absoluteUri.ToString(); if (absoluteToResourceMap.ContainsKey(absoluteUriString)) { string file = absoluteToResourceMap[absoluteUriString]; return assm.GetManifestResourceStream(file); } return base.GetEntity(absoluteUri, role, ofObjectToReturn); } } }