Freigeben über


ExpressionBuilder Klasse

Definition

Wertet Ausdrücke während der Seitenanalyse aus.

public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
Vererbung
ExpressionBuilder
Abgeleitet

Beispiele

Die folgenden Codebeispiele veranschaulichen das Erstellen eines benutzerdefinierten Ausdrucks-Generators durch Implementieren der ExpressionBuilder abstrakten Klasse. Diese Implementierung gibt ExpressionBuilder eine ausgewertete Anweisung zurück, die an den Ausdruck übergeben wird. Zum Ausführen dieses Beispiels müssen Sie zuerst den benutzerdefinierten Ausdrucks-Generator in der datei Web.config registrieren. Im ersten Codebeispiel wird veranschaulicht, wie der benutzerdefinierte Ausdrucks-Generator in der Web.config Datei registriert wird.

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

Im zweiten Codebeispiel wird veranschaulicht, wie auf den Ausdruck in einer .aspx Datei verwiesen wird.

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

Im dritten Codebeispiel wird veranschaulicht, wie Sie einen benutzerdefinierten Ausdrucks-Generator entwickeln, indem sie von ExpressionBuilder. Zum Ausführen dieses Codebeispiels müssen Sie die Klasse im Ordner App_Code platzieren.

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

Hinweise

Die ExpressionBuilder Klasse ist die Basisklasse für Ausdrucks-Generatoren, z. B. die AppSettingsExpressionBuilder Klasse, die Codeausdrücke während der Seitenanalyse erstellen.

Ausdrucks-Generatoren analysieren deklarative Ausdrücke und erstellen Code zum Abrufen von Werten, die an eine Steuerelementeigenschaft gebunden sind. In Szenarios ohne Kompilierung wertet ein Ausdrucks-Generator, der ein Feature ohne Kompilierung unterstützt, den Ausdruck während der Laufzeit aus.

Wenn der Seitenparser auf einen Ausdruck trifft, der mit der Zeichenfolge <%$ %>getrennt ist, wird ein Ausdrucks-Generator für den Ausdruck basierend auf dem Präfix in der Zeichenfolge erstellt. Das Präfix ist der Teil der Zeichenfolge links vom Doppelpunkt (:)). Wenn der Parser beispielsweise auf die Zeichenfolge <%$ ConnectionStrings:MessageDB %>trifft, wird ein ConnectionStringsExpressionBuilder Objekt erstellt. Präfixe sind Ausdrucks-Generatoren in der Web.config Datei im ExpressionBuilders Abschnitt zugeordnet.

Die rechte Seite des deklarativen Ausdrucks wird zur Auswertung an den Ausdrucks-Generator übergeben. Überschreiben Sie die GetCodeExpression Methode, um Code zu generieren, der mit der Seite kompiliert wird.

Wenn der benutzerdefinierte Ausdrucks-Generator auf nicht kompilierten Seiten aktiv sein soll, müssen Sie die EvaluateExpression Methode auch außer Kraft setzen, um ein Objekt zurückzugeben, das die Ergebnisse des Ausdrucks darstellt. Außerdem müssen Sie die SupportsEvaluate Eigenschaft außer Kraft setzen, um anzugeben, dass der benutzerdefinierte Ausdrucks-Generator keine Kompilierungsseiten unterstützt.

Sie können eine Reihe von Eigenschaften und Methoden zum Auswählen und Auswerten eines Ausdrucks definieren, der einer Steuerelementeigenschaft zur Entwurfszeit zugeordnet ist, indem Sie einen Ausdrucks-Editor implementieren. Der Editor wird im Ausdrucks-Generator über Metadaten auf Klassenebene markiert. Weitere Informationen finden Sie unter ExpressionEditor.

Hinweise für Ausführende

Wenn Sie von der ExpressionBuilder Klasse erben, müssen Sie die GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) Methode überschreiben.

Konstruktoren

Name Beschreibung
ExpressionBuilder()

Initialisiert eine neue Instanz der ExpressionBuilder-Klasse.

Eigenschaften

Name Beschreibung
SupportsEvaluate

Wenn eine abgeleitete Klasse überschrieben wird, wird ein Wert zurückgegeben, der angibt, ob das aktuelle ExpressionBuilder Objekt keine Kompilierungsseiten unterstützt.

Methoden

Name Beschreibung
Equals(Object)

Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht.

(Geerbt von Object)
EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext)

Wenn eine abgeleitete Klasse überschrieben wird, wird ein Objekt zurückgegeben, das einen ausgewerteten Ausdruck darstellt.

GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext)

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird Code zurückgegeben, der während der Seitenausführung verwendet wird, um den ausgewerteten Ausdruck abzurufen.

GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ParseExpression(String, Type, ExpressionBuilderContext)

Wenn eine abgeleitete Klasse überschrieben wird, wird ein Objekt zurückgegeben, das den analysierten Ausdruck darstellt.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für:

Weitere Informationen