view Implab.ServiceHost/Unity/RegisterElement.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 8714471e8d78
line wrap: on
line source

using System;
using System.Xml.Serialization;
using Unity.Lifetime;
using Unity.Registration;

namespace Implab.ServiceHost.Unity {

    [XmlRoot("register", Namespace = Schema.ContainerConfigurationNamespace)]
    public class RegisterElement : TypeAbstractRegistration  {
        
        /// <summary>
        /// An optional type which is registered as a service in the container, must be assignable to <see cref="ProvidesType">.
        /// </summary>
        [XmlAttribute("mapTo")]
        public string MapToType { get; set; }


        [XmlElement("constructor", typeof(ConstructorInjectionElement))]
        [XmlElement("property", typeof(PropertyInjectionElement))]
        [XmlElement("method", typeof(MethodInjectionElement))]
        public AbstractMemberInjection[] Injectors { get; set; }

        public override Type GetImplementationType(Func<string, Type> resolver) {
            return string.IsNullOrEmpty(MapToType) ? null : resolver(MapToType);
        }

        public override void Visit(TypeRegistrationBuilder builder) {
            if(Injectors != null)
                foreach(var injector in Injectors)
                    injector.Visit(builder);
        }

        
    }
    
}