SerializedParameterElement.cs
32 lines
| 1.0 KiB
| text/x-csharp
|
CSharpLexer
|
|
r274 | using System; | |
|
|
r271 | using System.Xml; | |
| using System.Xml.Schema; | |||
| using System.Xml.Serialization; | |||
|
|
r270 | namespace Implab.ServiceHost.Unity | |
| { | |||
|
|
r277 | public class SerializedParameterElement : InjectionParameterElement { | |
|
|
r273 | [XmlAttribute("href")] | |
| public string Location { get; set; } | |||
|
|
r271 | ||
| [XmlAnyElement] | |||
| public XmlElement[] Content { get; set; } | |||
|
|
r272 | ||
|
|
r274 | public XmlReader GetReader() { | |
| if (!string.IsNullOrEmpty(Location)) | |||
| return XmlReader.Create(Location); | |||
| if (Content != null && Content.Length > 0) | |||
| return Content[0].CreateNavigator().ReadSubtree(); | |||
| throw new Exception("No content found, expected XML document"); | |||
| } | |||
|
|
r275 | public override void Visit(InjectionValueBuilder builder) { | |
|
|
r277 | var type = builder.ResolveInjectedValueType(TypeName); | |
| var serializer = new XmlSerializer(type); | |||
| using(var reader = GetReader()) | |||
| builder.SetValue(type, serializer.Deserialize(reader)); | |||
|
|
r272 | } | |
|
|
r270 | } | |
| } |
