ExpressionBuilder Klas
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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) |