/// <summary> /// definition을 이용하여 객체를 생성합니다. /// </summary> /// <param name="definition">사용할 definition</param> /// <param name="parameters">definition이 사용할 인자</param> /// <returns>definition이 생성한 객체</returns> public virtual object Create(BaseManagedDefinition definition, object[] parameters) { if (definition == null) { throw new ArgumentNullException(nameof(definition)); } if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } return(definition.Generate(parameters)); }
private Func <object> CreateGetter(BaseManagedDefinition definition, object[] parameters) { Func <object> managedGetter; switch (definition.ManagedType) { case ManagedType.Singleton: // 싱글턴인 경우 객체를 만든 뒤 캡쳐 var managed = Create(definition, parameters); managedGetter = () => managed; break; case ManagedType.Proto: // 프로토인 경우 객체를 만드는 것을 캡쳐 managedGetter = () => Create(definition, parameters); break; default: throw new CreateManagedException(CreateManagedError.UnsupportedManagedType); } return(managedGetter); }