diff Implab.ServiceHost/Unity/SerializedElement.cs @ 273:79110a16cab7 v3

Working on Unity xml configuration: Refactoring in progress
author cin
date Thu, 26 Apr 2018 19:35:01 +0300
parents
children 22629bf26121
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Implab.ServiceHost/Unity/SerializedElement.cs	Thu Apr 26 19:35:01 2018 +0300
@@ -0,0 +1,38 @@
+using System;
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace Implab.ServiceHost.Unity
+{
+    public class SerializedElement : AbstractRegistration {
+        [XmlAttribute("href")]
+        public string Location { get; set; }
+
+        [XmlAttribute("serializedType")]
+        public string SerializedType { get; set; }
+
+
+        [XmlAnyElement]
+        public XmlElement[] Content { get; set; }
+        
+        public override void Visit(ContainerContext context) {
+            context.Visit(this);
+        }
+
+        public virtual Type ResolveSerializedType(ContainerContext context) {
+            if(string.IsNullOrEmpty(SerializedType))
+                return ResolveRegistrationType(context);
+            return context.Resolve(SerializedType);
+        }
+
+        public virtual object GetValue(ContainerContext context) {
+            var type = ResolveRegistrationType(context);
+            if (Content == null || Content.Length == 0)
+                return Safe.CreateDefaultValue(type);
+
+            var serializer = new XmlSerializer(type);
+            using(var reader = Content[0].CreateNavigator().ReadSubtree())
+                return serializer.Deserialize(reader);
+        }
+    }
+}
\ No newline at end of file