ExpressionBuilder Klas

Definitie

Evalueert expressies tijdens het parseren van pagina's.

public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
Overname
ExpressionBuilder
Afgeleid

Voorbeelden

In de volgende codevoorbeelden ziet u hoe u een opbouwfunctie voor aangepaste expressies bouwt door de ExpressionBuilder abstracte klasse te implementeren. Deze implementatie retourneert ExpressionBuilder een geëvalueerde instructie die wordt doorgegeven aan de expressie. Als u dit voorbeeld wilt uitvoeren, moet u eerst de opbouwfunctie voor aangepaste expressies registreren in het Web.config-bestand. In het eerste codevoorbeeld ziet u hoe u de opbouwfunctie voor aangepaste expressies registreert in het Web.config-bestand.

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

In het tweede codevoorbeeld ziet u hoe u naar de expressie in een .aspx-bestand verwijst.

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

In het derde codevoorbeeld ziet u hoe u een aangepaste opbouwfunctie voor expressies ontwikkelt door deze te afleiden van ExpressionBuilder. Als u dit codevoorbeeld wilt uitvoeren, moet u de klasse in de map App_Code plaatsen.

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

Opmerkingen

De ExpressionBuilder klasse is de basisklasse voor opbouwfuncties voor expressies, zoals de AppSettingsExpressionBuilder klasse, die code-expressies maken tijdens het parseren van pagina's.

Expressies parseren declaratieve expressies en maken code om waarden op te halen die zijn gebonden aan een besturingselementeigenschap. In scenario's zonder compileren evalueert een opbouwfunctie voor expressies die ondersteuning biedt voor een functie zonder compileren de expressie tijdens runtime.

Wanneer de paginaparser een expressie tegenkomt die is gescheiden door de tekenreeks <%$ %>, wordt er een opbouwfunctie voor expressies gemaakt op basis van het voorvoegsel in de tekenreeks. Het voorvoegsel is het gedeelte van de tekenreeks links van de dubbele punt (:). Wanneer de parser bijvoorbeeld de tekenreeks <%$ ConnectionStrings:MessageDB %>tegenkomt, wordt er een ConnectionStringsExpressionBuilder object gemaakt. Voorvoegsels zijn gekoppeld aan opbouwfuncties voor expressies in het Web.config-bestand in de ExpressionBuilders sectie.

De rechterkant van de declaratieve expressie wordt doorgegeven aan de opbouwfunctie voor expressies voor evaluatie. Overschrijf de GetCodeExpression methode om code te genereren die met de pagina wordt gecompileerd.

Als u wilt dat de opbouwfunctie voor aangepaste expressies actief is op pagina's die niet zijn gecompileerd, moet u ook de EvaluateExpression methode overschrijven om een object te retourneren dat de resultaten van de expressie vertegenwoordigt. U moet ook de SupportsEvaluate eigenschap overschrijven om aan te geven dat de opbouwfunctie voor aangepaste expressies geen compileerpagina's ondersteunt.

U kunt een set eigenschappen en methoden definiëren voor het selecteren en evalueren van een expressie die tijdens het ontwerp is gekoppeld aan een besturingselementeigenschap door een expressie-editor te implementeren. De editor is gemarkeerd op de opbouwfunctie voor expressies via metagegevens op klasseniveau. Zie ExpressionEditor voor meer informatie.

Notities voor uitvoerders

Wanneer u de ExpressionBuilder klasse overschrijft, moet u de GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) methode overschrijven.

Constructors

Name Description
ExpressionBuilder()

Initialiseert een nieuw exemplaar van de ExpressionBuilder klasse.

Eigenschappen

Name Description
SupportsEvaluate

Wanneer deze wordt overschreven in een afgeleide klasse, retourneert u een waarde die aangeeft of het huidige ExpressionBuilder object pagina's zonder compileer ondersteunt.

Methoden

Name Description
Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext)

Wanneer deze wordt overschreven in een afgeleide klasse, wordt een object geretourneerd dat een geëvalueerde expressie vertegenwoordigt.

GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext)

Wanneer deze wordt overschreven in een afgeleide klasse, retourneert u code die wordt gebruikt tijdens het uitvoeren van de pagina om de geëvalueerde expressie te verkrijgen.

GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
ParseExpression(String, Type, ExpressionBuilderContext)

Wanneer deze wordt overschreven in een afgeleide klasse, wordt een object geretourneerd dat de geparseerde expressie vertegenwoordigt.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)

Van toepassing op

Zie ook