Inheritance: IExpressionField
Example #1
0
        ///<summary>
        /// 구문 분석된 식을 나타내는 개체를 반환합니다.
        ///</summary>
        ///<returns>
        /// 구문 분석한 식을 나타내는 <see cref="T:System.Object" />입니다.
        ///</returns>
        ///<param name="expression">선언적 식의 값입니다.</param>
        ///<param name="propertyType">식에 의해 바인딩된 속성의 형식입니다.</param>
        ///<param name="context">식을 계산하는 데 필요한 컨텍스트 정보입니다.</param>
        ///<exception cref="T:System.Web.HttpException">리소스 식이 없거나 유효하지 않은 경우</exception>
        public override object ParseExpression(string expression, Type propertyType, ExpressionBuilderContext context)
        {
            expression.ShouldNotBeWhiteSpace("expression");

            if (IsDebugEnabled)
            {
                log.Debug("표현식을 파싱합니다... expression=[{0}], propertyType=[{1}], context=[{2}]", expression, propertyType, context);
            }

            string classKey;
            string resourceKey;

            //+ 예 : <%$ ExternalResources : AssemblyName|ResourceFileName, ResourceKey %> 를 파싱한다.
            //
            StringResourceTool.ParseClassKey(expression, ',', out classKey, out resourceKey);
            var field = new ExpressionField(classKey, resourceKey);

            // 실제로 값이 있는지 검사한다.
            if (ResourceProvider.GetObject(field.ClassKey, field.ResourceKey) == null)
            {
                throw new InvalidOperationException("지정한 리소스를 찾을 수 없습니다. resource key=" + field.ResourceKey);
            }

            return(field);
        }
        ///<summary>
        /// 구문 분석된 식을 나타내는 개체를 반환합니다.
        ///</summary>
        ///<returns>
        /// 구문 분석한 식을 나타내는 <see cref="T:System.Object" />입니다.
        ///</returns>
        ///<param name="expression">선언적 식의 값입니다.</param>
        ///<param name="propertyType">식에 의해 바인딩된 속성의 형식입니다.</param>
        ///<param name="context">식을 계산하는 데 필요한 컨텍스트 정보입니다.</param>
        ///<exception cref="T:System.Web.HttpException">리소스 식이 없거나 유효하지 않은 경우</exception>
        public override object ParseExpression(string expression, Type propertyType, ExpressionBuilderContext context) {
            expression.ShouldNotBeWhiteSpace("expression");

            if(IsDebugEnabled)
                log.Debug("표현식을 파싱합니다... expression=[{0}], propertyType=[{1}], context=[{2}]", expression, propertyType, context);

            string classKey;
            string resourceKey;

            //+ 예 : <%$ ExternalResources : AssemblyName|ResourceFileName, ResourceKey %> 를 파싱한다.
            //
            StringResourceTool.ParseClassKey(expression, ',', out classKey, out resourceKey);
            var field = new ExpressionField(classKey, resourceKey);

            // 실제로 값이 있는지 검사한다.
            if(ResourceProvider.GetObject(field.ClassKey, field.ResourceKey) == null)
                throw new InvalidOperationException("지정한 리소스를 찾을 수 없습니다. resource key=" + field.ResourceKey);

            return field;
        }