view Implab.ServiceHost/Unity/SerializedParameterElement.cs @ 278:6691aff01de1 v3

Implab: added XmlDefaultSeializer (SerializersPool is now obsolete) Implab.ServiceHost: rewritten TypeReference (added support for nested types), stable API
author cin
date Thu, 03 May 2018 09:59:44 +0300
parents 963b17c275be
children e0916ddc9950
line wrap: on
line source

using System;
using System.Xml;
using System.Xml.Schema;
using System.Xml.Serialization;

namespace Implab.ServiceHost.Unity
{
    public class SerializedParameterElement : InjectionParameterElement {
        [XmlAttribute("href")]
        public string Location { get; set; }

        [XmlAnyElement]
        public XmlElement[] Content { get; set; }

        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");
        }

        public override void Visit(InjectionParameterBuilder builder) {
            var type = builder.ResolveInjectedValueType(TypeName);

            var serializer = new XmlSerializer(type);
            using(var reader = GetReader())
                builder.SetValue(type, serializer.Deserialize(reader));
            
        }
    }
}