/// <summary>
        ///     IoC 컨테이너가 제공하는 객체 처리를 수행합니다.
        /// </summary>
        /// <param name="element">	컨테이너 요소입니다. </param>
        /// <param name="lifetime">	The lifetime. </param>
        /// <param name="constructor">역직렬화된 생성자 요소입니다.</param>
        /// <param name="properties">역직렬화된 속성(Property) 요소입니다.</param>
        /// <param name="methods">역직렬화된 메서드 요소입니다.</param>
        protected override void ResolveRegisterProcessor(RegisterElement element, LifetimeFlag lifetime, IEnumerable <object> constructor, IEnumerable <object> properties, IEnumerable <object> methods)
        {
            var component = Component.For(Type.GetType(element.contract))
                            .ImplementedBy(Type.GetType(element.dependencyTo))
                            .Named(element.key);

            if (constructor != null)
            {
                var constructorParams = ((List <object>)constructor.First());
                constructorParams.Where(o => o is Parameter).Cast <Parameter>().ToList().ForEach(o => component.Parameters(o));
                constructorParams.Where(o => o is DynamicParametersDelegate).Cast <DynamicParametersDelegate>().ToList().ForEach(@delegate =>
                                                                                                                                 component.DynamicParameters((kernel, d) => @delegate(kernel, d)));
            }

            if (properties != null)
            {
                properties.Where(o => o is Property).Cast <Property>().ToList().ForEach(o => component.DependsOn(o));
                properties.Where(o => o is DynamicParametersDelegate).Cast <DynamicParametersDelegate>().ToList().ForEach(@delegate =>
                                                                                                                          component.DynamicParameters((kernel, d) => @delegate(kernel, d)));
            }

            if (methods != null)
            {
                throw new NotSupportedException("FrameworkContainerForCastle 은 현재 Method Injection 을 지원하지 않습니다.");
            }

            container.ContainerObject.Register(component);
        }
        /// <summary>
        ///     타입을 <see cref="IFrameworkContainer"/> 에 등록합니다.
        /// </summary>
        /// <typeparam name="T">	등록되는 개체의 타입입니다. </typeparam>
        /// <param name="flag">	객체의 생명주기 값입니다. </param>
        /// <returns>
        ///     개체 등록을 마친 후 현재의 <see cref="IFrameworkContainer"/> 를 반환합니다.
        /// </returns>
        public override IFrameworkContainer RegisterType <T>(LifetimeFlag flag)
        {
            var lifetime = LifetimeMapping.GetLifetimeObject(flag);

            ContainerObject.Register(Component.For <T>().ImplementedBy <T>().LifeStyle.Custom(lifetime));
            return(this);
        }
        /// <summary>
        ///     IoC 컨테이너가 제공하는 객체 처리를 수행합니다.
        /// </summary>
        /// <param name="element">	컨테이너 요소입니다. </param>
        /// <param name="lifetime">	The lifetime. </param>
        /// <param name="constructor">역직렬화된 생성자 요소입니다.</param>
        /// <param name="properties">역직렬화된 속성(Property) 요소입니다.</param>
        /// <param name="methods">역직렬화된 메서드 요소입니다.</param>
        protected override void ResolveRegisterProcessor(RegisterElement element, LifetimeFlag lifetime, IEnumerable <object> constructor, IEnumerable <object> properties, IEnumerable <object> methods)
        {
            var concat = Enumerable.Empty <InjectionMember>();

            if (constructor != null)
            {
                concat = concat.Concat(constructor.Cast <InjectionMember>());
            }
            if (properties != null)
            {
                concat = concat.Concat(properties.Cast <InjectionMember>());
            }
            if (methods != null)
            {
                concat = concat.Concat(methods.Cast <InjectionMember>());
            }

            var contractType   = Type.GetType(element.contract);
            var dependencyType = Type.GetType(element.dependencyTo);

            try
            {
                container.ContainerObject.RegisterType(
                    contractType,
                    dependencyType,
                    element.key,
                    container.LifetimeMapping.GetLifetimeObject(lifetime),
                    concat.ToArray());
            }
            catch (NotSupportedException) { }
            catch (Exception e)
            {
                // logger.Error(e);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        ///     <see cref="IFrameworkContainer"/>에 매핑된 <see cref="LifetimeFlag"/>값으로 기반 프레임워크의 Lifetime
        ///     객체를 가져옵니다.
        /// </summary>
        /// <param name="flag">	IoC 컨테이너의 Lifetime 플래그 입니다. </param>
        /// <param name="currentLifetimeObject">	The current lifetime object. </param>
        /// <returns>
        ///     The lifetime object.
        /// </returns>
        public TLifetime GetLifetimeObject(LifetimeFlag flag, TLifetime currentLifetimeObject)
        {
            var result = mapper.FirstOrDefault(o => o.Key(flag) == true).Value;

            if (result == null)
            {
                throw new FrameworkDependencyException(String.Format(ExceptionRS.O_값이_1_입니다, "LifeTimeFlag", "NULL"));
            }


            return(result.ReturnAction(currentLifetimeObject));
        }
Exemplo n.º 5
0
        /// <summary>
        ///		<see cref="IFrameworkContainer"/>에 매핑된 <see cref="LifetimeFlag"/>를 제거합니다.
        /// </summary>
        /// <param name="flag">IoC 컨테이너의 Lifetime 플래그 입니다.</param>
        /// <returns>제거할 때 사용된 <see cref="ILifetimeMapping{TLifetime}"/> 객체를 반환합니다.</returns>
        public ILifetimeMapping <TLifetime> RemoveMap(LifetimeFlag flag)
        {
            var key = mapper.FirstOrDefault(o => o.Key(flag) == true).Key;

            if (key == null)
            {
                return(this);
            }

            mapper.Remove(key);

            return(this);
        }
 /// <summary>
 ///     타입을 <see cref="IFrameworkContainer"/> 에 등록합니다.
 /// </summary>
 /// <typeparam name="TContract">	등록되는 개체의 계약 타입입니다. </typeparam>
 /// <typeparam name="TImplements">	등록되는 개체의 구현 타입입니다. </typeparam>
 /// <param name="key">	객체의 키 값입니다. </param>
 /// <param name="flag">	객체의 생명주기 값입니다. </param>
 /// <returns>
 ///     개체 등록을 마친 후 현재의 <see cref="IFrameworkContainer"/> 를 반환합니다.
 /// </returns>
 public abstract IFrameworkContainer RegisterType <TContract, TImplements>(string key, LifetimeFlag flag) where TContract : class
     where TImplements : TContract;
 public DependencyContractAttribute(Type contractType, LifetimeFlag flag)
     : this(contractType, null, flag)
 {
 }
Exemplo n.º 8
0
 public DependencyContractAttribute(Type contractType, LifetimeFlag flag)
     : this(contractType, null, flag)
 {
 }
 /// <summary>
 ///     타입을 <see cref="IFrameworkContainer"/> 에 등록합니다.
 /// </summary>
 /// <typeparam name="TContract">	등록되는 개체의 타입입니다. </typeparam>
 /// <param name="flag">	객체의 생명주기 값입니다. </param>
 /// <returns>
 ///     개체 등록을 마친 후 현재의 <see cref="IFrameworkContainer"/> 를 반환합니다.
 /// </returns>
 public override IFrameworkContainer RegisterType <TContract>(LifetimeFlag flag)
 {
     ContainerObject.RegisterType <TContract>(LifetimeMapping.GetLifetimeObject(flag));
     return(this);
 }
 /// <summary>
 ///     타입을 <see cref="IFrameworkContainer"/> 에 등록합니다.
 /// </summary>
 /// <typeparam name="TContract">	등록되는 개체의 계약 타입입니다. </typeparam>
 /// <typeparam name="TImplements">	등록되는 개체의 구현 타입입니다. </typeparam>
 /// <param name="key">	객체의 키 값입니다. </param>
 /// <param name="flag">	The flag. </param>
 /// <returns>
 ///     개체 등록을 마친 후 현재의 <see cref="IFrameworkContainer"/> 를 반환합니다.
 /// </returns>
 public override IFrameworkContainer RegisterType <TContract, TImplements>(string key, LifetimeFlag flag)
 {
     ContainerObject.RegisterType <TContract, TImplements>(key, LifetimeMapping.GetLifetimeObject(flag));
     return(this);
 }
 public abstract override IFrameworkContainer RegisterInstance <TContract>(TContract @object, LifetimeFlag flag);
        protected override void ResolveRegisterProcessor(string key, Type contractType, Type implementType, LifetimeFlag lifetime)
        {
            var component = Component.For(contractType)
                            .ImplementedBy(implementType)
                            .LifeStyle.Custom(container.LifetimeMapping.GetLifetimeObject(lifetime))
                            .Named(key);

            container.ContainerObject.Register(component);
        }
Exemplo n.º 13
0
 /// <summary>
 ///		<see cref="IFrameworkContainer"/>에 매핑된 <see cref="LifetimeFlag"/>값으로 기반 프레임워크의 Lifetime 객체를 가져옵니다.
 /// </summary>
 /// <param name="flag">IoC 컨테이너의 Lifetime 플래그 입니다.</param>
 /// <returns></returns>
 public TLifetime GetLifetimeObject(LifetimeFlag flag)
 {
     return(GetLifetimeObject(flag, default(TLifetime)));
 }
 /// <summary>
 ///     타입을 <see cref="IFrameworkContainer"/> 에 등록합니다.
 /// </summary>
 /// <typeparam name="T">	등록되는 개체의 계약 타입입니다. </typeparam>
 /// <param name="flag">	객체의 생명주기 값입니다. </param>
 /// <returns>
 ///     개체 등록을 마친 후 현재의 <see cref="IFrameworkContainer"/> 를 반환합니다.
 /// </returns>
 public abstract override IFrameworkContainer RegisterType <T>(LifetimeFlag flag);
 public abstract override IFrameworkContainer RegisterType <TContract>(Type implementType, LifetimeFlag flag);
 /// <summary>
 ///     타입을 <see cref="IFrameworkContainer"/> 에 등록합니다.
 /// </summary>
 /// <typeparam name="TContract">	등록되는 개체의 계약 타입입니다. </typeparam>
 /// <typeparam name="TImplements">	등록되는 개체의 구현 타입입니다. </typeparam>
 /// <param name="key">	객체의 키 값입니다. </param>
 /// <param name="flag">	객체의 생명주기 값입니다. </param>
 /// <returns>
 ///     개체 등록을 마친 후 현재의 <see cref="IFrameworkContainer"/> 를 반환합니다.
 /// </returns>
 public abstract override IFrameworkContainer RegisterType <TContract, TImplements>(string key, LifetimeFlag flag);
 public abstract override IFrameworkContainer RegisterInstance(string key, Type type, object @object, LifetimeFlag flag);
 protected override void ResolveRegisterProcessor(string key, Type contractType, Type implementType, LifetimeFlag lifetime)
 {
     container.ContainerObject.RegisterType(contractType, implementType, key, container.LifetimeMapping.GetLifetimeObject(lifetime), new InjectionMember[] { });
 }
 /// <summary>
 ///     IoC 컨테이너가 제공하는 객체 처리를 수행합니다
 /// </summary>
 /// <param name="key">              The key. </param>
 /// <param name="contractType">     Type of the contract. </param>
 /// <param name="implementType">    Type of the implement. </param>
 /// <param name="lifetime">         The lifetime. </param>
 protected abstract void ResolveRegisterProcessor(string key, Type contractType, Type implementType, LifetimeFlag lifetime);
 public abstract override IFrameworkContainer RegisterType(string key, Type contractType, Type implementType, LifetimeFlag flag);
 /// <summary>
 ///     IoC 컨테이너가 제공하는 객체 처리를 수행합니다.
 /// </summary>
 /// <param name="element">	    컨테이너 요소입니다. </param>
 /// <param name="lifetime">	    The lifetime. </param>
 /// <param name="constructor">  역직렬화된 생성자 요소입니다.</param>
 /// <param name="properties">   역직렬화된 속성(Property) 요소입니다.</param>
 /// <param name="methods">      역직렬화된 메서드 요소입니다.</param>
 protected abstract void ResolveRegisterProcessor(RegisterElement element, LifetimeFlag lifetime, IEnumerable <object> constructor, IEnumerable <object> properties, IEnumerable <object> methods);
Exemplo n.º 22
0
        private static void ensureObject(string key, Type contractType, Type implementType, LifetimeFlag lifetime)
        {
            if (Attribute.IsDefined(contractType, typeof(DynamicAttribute)) || (!container.IsRegisted(contractType) && contractType.IsInterface))
            {
                var dynamicType = DynamicObject.InterfaceImplementationType(contractType);
                container.RegisterType(contractType, dynamicType, LifetimeFlag.PerCall);
            }

            if (!container.IsRegisted(contractType))
            {
                container.RegisterType(key, contractType, implementType, lifetime);
            }
        }
 /// <summary>
 ///     타입을 <see cref="IFrameworkContainer"/> 에 등록합니다.
 /// </summary>
 ///
 /// <param name="key">    개체의 키 값입니다. </param>
 /// <param name="type">   등록되는 객체의 타입입니다. </param>
 /// <param name="object"> 등록되는 객체입니다. </param>
 /// <param name="flag">   객체의 생명주기 값입니다. </param>
 public override IFrameworkContainer RegisterInstance(string key, Type type, object @object, LifetimeFlag flag)
 {
     ContainerObject.RegisterInstance(type, key, @object, LifetimeMapping.GetLifetimeObject(flag));
     return(this);
 }
        /// <summary>
        ///     타입을 <see cref="IFrameworkContainer"/> 에 등록합니다.
        /// </summary>
        /// <typeparam name="TContract">	등록되는 개체의 계약 타입입니다. </typeparam>
        /// <typeparam name="TImplements">	등록되는 개체의 구현 타입입니다. </typeparam>
        /// <param name="key">	객체의 키 값입니다. </param>
        /// <param name="flag">	The flag. </param>
        /// <returns>
        ///     개체 등록을 마친 후 현재의 <see cref="IFrameworkContainer"/> 를 반환합니다.
        /// </returns>
        public override IFrameworkContainer RegisterType <TContract, TImplements>(string key, LifetimeFlag flag)
        {
            var lifetime = LifetimeMapping.GetLifetimeObject(flag);

            ContainerObject.Register(Component.For <TContract>().ImplementedBy <TImplements>().LifeStyle.Custom(lifetime).Named(key));
            return(this);
        }
 /// <summary>
 ///    타입을 <see cref="IFrameworkContainer"/> 에 등록합니다.
 /// </summary>
 /// <param name="contractType">  등록되는 객체의 타입입니다. </param>
 /// <param name="implementType"> 구현되는 개체의 타입입니다. </param>
 /// <param name="flag">          객체의 생명주기 값입니다. </param>
 public override IFrameworkContainer RegisterType(Type contractType, Type implementType, LifetimeFlag flag)
 {
     ContainerObject.RegisterType(contractType, implementType, LifetimeMapping.GetLifetimeObject(flag));
     return(this);
 }
        public override IFrameworkContainer RegisterInstance <TContract>(string key, TContract @object, LifetimeFlag flag)
        {
            var lifetime = LifetimeMapping.GetLifetimeObject(flag);

            ContainerObject.Register(Component.For <TContract>().Instance(@object).LifeStyle.Custom(lifetime).Named(key));
            return(this);
        }
Exemplo n.º 27
0
 public DependencyContractAttribute()
 {
     this.LifetimeFlag = IoC.LifetimeFlag.Default;
 }
 public override IFrameworkContainer RegisterInstance(string key, Type type, object @object, LifetimeFlag flag)
 {
     throw new NotImplementedException();
 }
Exemplo n.º 29
0
 public DependencyContractAttribute(Type type, string key, LifetimeFlag flag)
 {
     this.TypeOfContract = type;
     this.Key            = key;
     this.LifetimeFlag   = flag;
 }
        public override IFrameworkContainer RegisterType(Type contractType, Type implementType, LifetimeFlag flag)
        {
            var lifetime = LifetimeMapping.GetLifetimeObject(flag);

            ContainerObject.Register(Component.For(contractType).ImplementedBy(implementType).LifeStyle.Custom(lifetime));
            return(this);
        }
Exemplo n.º 31
0
 public DependencyContractAttribute(Type type, string key, LifetimeFlag flag)
 {
     this.TypeOfContract = type;
     this.Key            = key;
     this.LifetimeFlag   = flag;
 }
 public abstract IFrameworkContainer RegisterType <TContract>(Type implementType, LifetimeFlag flag) where TContract : class;