ExpressionBuilder Klasa

Definicja

Oblicza wyrażenia podczas analizowania stron.

public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
Dziedziczenie
ExpressionBuilder
Pochodne

Przykłady

W poniższych przykładach kodu pokazano, jak utworzyć konstruktora wyrażeń niestandardowych, implementując klasę abstrakcyjną ExpressionBuilder . Ta implementacja ExpressionBuilder zwraca obliczoną instrukcję przekazywaną do wyrażenia. Aby uruchomić ten przykład, należy najpierw zarejestrować konstruktora wyrażeń niestandardowych w pliku Web.config. Pierwszy przykład kodu pokazuje, jak zarejestrować konstruktora wyrażeń niestandardowych w pliku Web.config.

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

W drugim przykładzie kodu pokazano, jak odwoływać się do wyrażenia w pliku aspx.

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

W trzecim przykładzie kodu pokazano, jak opracować dostosowany konstruktor wyrażeń, wyprowadzając element z ExpressionBuilderelementu . Aby uruchomić ten przykładowy kod, należy umieścić klasę w folderze 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

Uwagi

Klasa ExpressionBuilder jest klasą bazową konstruktorów wyrażeń, takich jak AppSettingsExpressionBuilder klasa, która tworzy wyrażenia kodu podczas analizowania strony.

Konstruktory wyrażeń analizują wyrażenia deklaratywne i tworzą kod w celu pobrania wartości powiązanych z właściwością kontrolki. W scenariuszach bez kompilacji konstruktor wyrażeń, który obsługuje funkcję bez kompilacji, ocenia wyrażenie w czasie wykonywania.

Gdy analizator strony napotka wyrażenie rozdzielone ciągiem <%$ %>, tworzy konstruktora wyrażeń dla wyrażenia na podstawie prefiksu w ciągu. Prefiks jest częścią ciągu, która znajduje się po lewej stronie dwukropka (:). Na przykład gdy analizator napotka ciąg <%$ ConnectionStrings:MessageDB %>, tworzy ConnectionStringsExpressionBuilder obiekt. Prefiksy są skojarzone z konstruktorami wyrażeń w pliku Web.config w ExpressionBuilders sekcji .

Prawa strona wyrażenia deklaratywnego jest przekazywana do konstruktora wyrażeń do oceny. Zastąpij metodę w celu wygenerowania GetCodeExpression kodu, który zostanie skompilowany przy użyciu strony.

Jeśli chcesz, aby konstruktor wyrażeń niestandardowych był aktywny na stronach, które nie są skompilowane, należy również zastąpić metodę EvaluateExpression , aby zwrócić obiekt reprezentujący wyniki wyrażenia. Należy również zastąpić SupportsEvaluate właściwość , aby wskazać, że konstruktor wyrażeń niestandardowych obsługuje strony bez kompilacji.

Można zdefiniować zestaw właściwości i metod do wybierania i oceniania wyrażenia skojarzonego z właściwością kontrolki w czasie projektowania przez zaimplementowanie edytora wyrażeń. Edytor jest oznaczony w konstruktorze wyrażeń za pomocą metadanych na poziomie klasy. Aby uzyskać więcej informacji, zobacz ExpressionEditor.

Uwagi dotyczące implementowania

Po dziedziczeniu ExpressionBuilder z klasy należy zastąpić metodę GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) .

Konstruktory

ExpressionBuilder()

Inicjuje nowe wystąpienie klasy ExpressionBuilder.

Właściwości

SupportsEvaluate

Po zastąpieniu w klasie pochodnej zwraca wartość wskazującą, czy bieżący ExpressionBuilder obiekt obsługuje strony bez kompilacji.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext)

Po przesłonięciu w klasie pochodnej zwraca obiekt, który reprezentuje obliczone wyrażenie.

GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext)

Gdy przesłonięć w klasie pochodnej, zwraca kod używany podczas wykonywania strony w celu uzyskania obliczonego wyrażenia.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ParseExpression(String, Type, ExpressionBuilderContext)

Po przesłonięciu w klasie pochodnej zwraca obiekt reprezentujący przeanalizowane wyrażenie.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy

Zobacz też