Example #1
0
        /// <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));
        }
Example #2
0
        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);
        }