다음을 통해 공유


ExpressionBuilder 클래스

정의

페이지 구문 분석 중 식을 평가합니다.

public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
상속
ExpressionBuilder
파생

예제

다음 코드 예제에서는 추상 클래스를 구현하여 사용자 지정 식 작성기를 빌드하는 ExpressionBuilder 방법을 보여 줍니다. 이 구현은 ExpressionBuilder 식에 전달되는 계산된 문을 반환합니다. 이 예제를 실행하려면 먼저 Web.config 파일에 사용자 지정 식 작성기를 등록해야 합니다. 첫 번째 코드 예제에서는 Web.config 파일에 사용자 지정 식 작성기를 등록하는 방법을 보여 줍니다.

<configuration>
    <system.web>
       <compilation>
          <expressionBuilders>
              <add expressionPrefix="MyCustomExpression"
               type="MyCustomExpressionBuilder"/>
          </expressionBuilders>
       </compilation>
    </system.web>
</configuration>

두 번째 코드 예제에서는 .aspx 파일에서 식을 참조하는 방법을 보여 줍니다.

<asp:Label ID="Label1" runat="server"
Text="<%$ MyCustomExpression:Hello, world! %>" />

세 번째 코드 예제에서는 에서 파생하여 사용자 지정된 식 작성기를 개발하는 방법을 보여 줍니다 ExpressionBuilder. 이 코드 예제를 실행하려면 클래스를 App_Code 폴더에 배치해야 합니다.

using System;
using System.CodeDom;
using System.Web.UI;
using System.ComponentModel;
using System.Web.Compilation;
using System.Web.UI.Design;

// Apply ExpressionEditorAttributes to allow the 
// expression to appear in the designer.
[ExpressionPrefix("MyCustomExpression")]
[ExpressionEditor("MyCustomExpressionEditor")]
public class MyExpressionBuilder : ExpressionBuilder
{
    // Create a method that will return the result 
    // set for the expression argument.
    public static object GetEvalData(string expression, Type target, string entry)
    {
        return expression;
    }

    public override object EvaluateExpression(object target, BoundPropertyEntry entry, 
    object parsedData, ExpressionBuilderContext context)
    {
        return GetEvalData(entry.Expression, target.GetType(), entry.Name);
    }

    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, 
    object parsedData, ExpressionBuilderContext context)
    {
        Type type1 = entry.DeclaringType;
        PropertyDescriptor descriptor1 = TypeDescriptor.GetProperties(type1)[entry.PropertyInfo.Name];
        CodeExpression[] expressionArray1 = new CodeExpression[3];
        expressionArray1[0] = new CodePrimitiveExpression(entry.Expression.Trim());
        expressionArray1[1] = new CodeTypeOfExpression(type1);
        expressionArray1[2] = new CodePrimitiveExpression(entry.Name);
        return new CodeCastExpression(descriptor1.PropertyType, new CodeMethodInvokeExpression(new 
       CodeTypeReferenceExpression(base.GetType()), "GetEvalData", expressionArray1));
    }

    public override bool SupportsEvaluate
    {
        get { return true; }
    }
}
Imports System.CodeDom
Imports System.Web.UI
Imports System.ComponentModel
Imports System.Web.Compilation
Imports System.Web.UI.Design

' Apply ExpressionEditorAttributes to allow the 
' expression to appear in the designer.
<ExpressionPrefix("MyCustomExpression")> _
<ExpressionEditor("MyCustomExpressionEditor")> _
Public Class MyExpressionBuilder
    Inherits ExpressionBuilder
    ' Create a method that will return the result 
    ' set for the expression argument.
    Public Shared Function GetEvalData(ByVal expression As String, _
       ByVal target As Type, ByVal entry As String) As Object
        Return expression
    End Function

    Public Overrides Function EvaluateExpression(ByVal target As Object, _
       ByVal entry As BoundPropertyEntry, ByVal parsedData As Object, _
       ByVal context As ExpressionBuilderContext) As Object
        Return GetEvalData(entry.Expression, target.GetType(), entry.Name)
    End Function

    Public Overrides Function GetCodeExpression(ByVal entry _
       As BoundPropertyEntry, ByVal parsedData As Object, ByVal context _
       As ExpressionBuilderContext) As CodeExpression
        Dim type1 As Type = entry.DeclaringType
        Dim descriptor1 As PropertyDescriptor = _
           TypeDescriptor.GetProperties(type1)(entry.PropertyInfo.Name)
        Dim expressionArray1(2) As CodeExpression
        expressionArray1(0) = New CodePrimitiveExpression(entry.Expression.Trim())
        expressionArray1(1) = New CodeTypeOfExpression(type1)
        expressionArray1(2) = New CodePrimitiveExpression(entry.Name)
        Return New CodeCastExpression(descriptor1.PropertyType, _
           New CodeMethodInvokeExpression(New CodeTypeReferenceExpression _
           (MyBase.GetType()), "GetEvalData", expressionArray1))
    End Function

    Public Overrides ReadOnly Property SupportsEvaluate() As Boolean
        Get
            Return True
        End Get
    End Property
End Class

설명

클래스는 ExpressionBuilder 페이지 구문 분석 중에 코드 식을 만드는 클래스와 같은 AppSettingsExpressionBuilder 식 작성기에 대한 기본 클래스입니다.

식 작성기에서는 선언적 식을 구문 분석하고 컨트롤 속성에 바인딩된 값을 검색하는 코드를 만듭니다. 컴파일되지 않은 시나리오에서는 컴파일되지 않은 기능을 지원하는 식 작성기에서 런타임 동안 식을 평가합니다.

페이지 파서가 문자열로 구분된 식을 발견하면 문자열 <%$ %>의 접두사를 기반으로 식에 대한 식 작성기를 만듭니다. 접두사는 콜론(:) 왼쪽에 있는 문자열의 부분입니다. 예를 들어 파서가 문자열 <%$ ConnectionStrings:MessageDB %>을 발견하면 개체를 ConnectionStringsExpressionBuilder 만듭니다. 접두사는 섹션의 Web.config 파일에서 식 작성기와 ExpressionBuilders 연결됩니다.

선언적 식의 오른쪽은 계산을 위해 식 작성기로 전달됩니다. 페이지로 컴파일될 코드를 생성하도록 메서드를 재정 GetCodeExpression 의합니다.

컴파일되지 않은 페이지에서 사용자 지정 식 작성기를 활성화하려면 식의 결과를 나타내는 개체를 반환하도록 메서드를 재정 EvaluateExpression 의해야 합니다. 또한 사용자 지정 식 작성기가 컴파일되지 않은 페이지를 지원함을 나타내기 위해 속성을 재정 SupportsEvaluate 의해야 합니다.

식 편집기를 구현하여 디자인 타임에 컨트롤 속성과 연결된 식을 선택하고 평가하기 위한 속성 및 메서드 집합을 정의할 수 있습니다. 편집기는 클래스 수준 메타데이터를 통해 식 작성기에서 표시됩니다. 자세한 내용은 ExpressionEditor를 참조하세요.

구현자 참고

클래스에서 상속할 때 메서드를 ExpressionBuilder 재정의 GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) 해야 합니다.

생성자

Name Description
ExpressionBuilder()

ExpressionBuilder 클래스의 새 인스턴스를 초기화합니다.

속성

Name Description
SupportsEvaluate

파생 클래스에서 재정의되는 경우 현재 ExpressionBuilder 개체가 컴파일되지 않은 페이지를 지원하는지 여부를 나타내는 값을 반환합니다.

메서드

Name Description
Equals(Object)

지정된 개체가 현재 개체와 같은지 여부를 확인합니다.

(다음에서 상속됨 Object)
EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext)

파생 클래스에서 재정의되는 경우 계산된 식을 나타내는 개체를 반환합니다.

GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext)

파생 클래스에서 재정의되는 경우 페이지 실행 중에 계산된 식을 가져오는 데 사용되는 코드를 반환합니다.

GetHashCode()

기본 해시 함수로 사용됩니다.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type 가져옵니다.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
ParseExpression(String, Type, ExpressionBuilderContext)

파생 클래스에서 재정의되는 경우 구문 분석된 식을 나타내는 개체를 반환합니다.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

적용 대상

추가 정보