ExpressionBuilder Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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) |