diff Implab.ServiceHost/Unity/RegisterElement.cs @ 279:8714471e8d78 v3

Container configuration cleanup, RC2
author cin
date Fri, 04 May 2018 18:12:42 +0300
parents 963b17c275be
children
line wrap: on
line diff
--- a/Implab.ServiceHost/Unity/RegisterElement.cs	Thu May 03 09:59:44 2018 +0300
+++ b/Implab.ServiceHost/Unity/RegisterElement.cs	Fri May 04 18:12:42 2018 +0300
@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Generic;
 using System.Xml.Serialization;
 using Unity.Lifetime;
 using Unity.Registration;
@@ -6,7 +7,7 @@
 namespace Implab.ServiceHost.Unity {
 
     [XmlRoot("register", Namespace = Schema.ContainerConfigurationNamespace)]
-    public class RegisterElement : TypeAbstractRegistration  {
+    public class RegisterElement : AbstractRegistration, ITypeRegistration  {
         
         /// <summary>
         /// An optional type which is registered as a service in the container, must be assignable to <see cref="ProvidesType">.
@@ -20,17 +21,19 @@
         [XmlElement("method", typeof(MethodInjectionElement))]
         public AbstractMemberInjection[] Injectors { get; set; }
 
-        public override Type GetImplementationType(Func<string, Type> resolver) {
-            return string.IsNullOrEmpty(MapToType) ? null : resolver(MapToType);
+        IEnumerable<ITypeMemberInjection> ITypeRegistration.MemberInjections {
+            get {
+                return Injectors;
+            }
         }
 
-        public override void Visit(TypeRegistrationBuilder builder) {
-            if(Injectors != null)
-                foreach(var injector in Injectors)
-                    injector.Visit(builder);
+        public Type GetImplementationType(ContainerBuilder builder) {
+            return builder.ResolveType(MapToType);
         }
 
-        
+        public override void Visit(ContainerBuilder builder) {
+            builder.Visit(this);
+        }
     }
     
 }
\ No newline at end of file