ExpressionBuilder Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Wertet während der Seitenanalyse Ausdrücke 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, wie Sie einen benutzerdefinierten Ausdrucks-Generator erstellen, indem Sie die ExpressionBuilder abstrakte Klasse implementieren. Diese Implementierung gibt ExpressionBuilder eine ausgewertete Anweisung zurück, die an den Ausdruck übergeben wird. Um dieses Beispiel auszuführen, müssen Sie zuerst den benutzerdefinierten Ausdrucks-Generator in der datei Web.config registrieren. Im ersten Codebeispiel wird veranschaulicht, wie sie den benutzerdefinierten Ausdrucks-Generator in der Web.config-Datei registrieren.
<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. Um dieses Codebeispiel auszuführen, 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 keine Kompilierungsszenarien wertet ein Ausdrucks-Generator, der ein Feature ohne Kompilierung unterstützt, den Ausdruck während der Laufzeit aus.
Wenn der Seitenparser auf einen Ausdruck stößt, der mit der Zeichenfolge <%$ %>
getrennt ist, erstellt er einen Ausdrucks-Generator für den Ausdruck basierend auf dem Präfix in der Zeichenfolge. Das Präfix ist der Teil der Zeichenfolge, die links vom Doppelpunkt (:)) liegt. Wenn der Parser beispielsweise auf die Zeichenfolge <%$ ConnectionStrings:MessageDB %>
trifft, wird ein ConnectionStringsExpressionBuilder Objekt erstellt. Präfixe sind Ausdrucks-Generatoren in der datei Web.config im ExpressionBuilders Abschnitt zugeordnet.
Die rechte Seite des deklarativen Ausdrucks wird an den Ausdrucks-Generator zur Auswertung übergeben. Überschreiben Sie die Methode, um Code zu generieren, der GetCodeExpression 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 einen Satz von Eigenschaften und Methoden zum Auswählen und Auswerten eines Ausdrucks definieren, der zur Entwurfszeit einer Steuerelementeigenschaft 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
ExpressionBuilder() |
Initialisiert eine neue Instanz der ExpressionBuilder-Klasse. |
Eigenschaften
SupportsEvaluate |
Gibt nach dem Überschreiben in einer abgeleiteten Klasse einen Wert zurück, der angibt, ob das aktuelle ExpressionBuilder-Objekt nicht kompilierte Seiten unterstützt. |
Methoden
Equals(Object) |
Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist. (Geerbt von Object) |
EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext) |
Gibt nach dem Überschreiben in einer abgeleiteten Klasse ein Objekt zurück, das einen ausgewerteten Ausdruck darstellt. |
GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) |
Gibt nach dem Überschreiben in einer abgeleiteten Klasse Code zurück, mit dem während der Seitenausführung der ausgewertete Ausdruck abgerufen wird. |
GetHashCode() |
Fungiert als Standardhashfunktion. (Geerbt von Object) |
GetType() |
Ruft den Type der aktuellen Instanz ab. (Geerbt von Object) |
MemberwiseClone() |
Erstellt eine flache Kopie des aktuellen Object. (Geerbt von Object) |
ParseExpression(String, Type, ExpressionBuilderContext) |
Gibt nach dem Überschreiben in einer abgeleiteten Klasse ein Objekt zurück, das den analysierten Ausdruck darstellt. |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |