/// <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); } }
/// <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)); }
/// <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) { }
/// <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); }
/// <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);
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); }
public DependencyContractAttribute() { this.LifetimeFlag = IoC.LifetimeFlag.Default; }
public override IFrameworkContainer RegisterInstance(string key, Type type, object @object, LifetimeFlag flag) { throw new NotImplementedException(); }
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); }
public abstract IFrameworkContainer RegisterType <TContract>(Type implementType, LifetimeFlag flag) where TContract : class;