ExpressionBuilder Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Évalue des expressions pendant l'analyse de page.
public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
- Héritage
-
ExpressionBuilder
- Dérivé
Exemples
Les exemples de code suivants montrent comment créer un générateur d’expressions personnalisées en implémentant la ExpressionBuilder classe abstraite. Cette implémentation de ExpressionBuilder retourne une instruction évaluée passée à l’expression. Pour exécuter cet exemple, vous devez d’abord inscrire le générateur d’expressions personnalisées dans le fichier Web.config. Le premier exemple de code montre comment inscrire le générateur d’expressions personnalisées dans le fichier Web.config.
<configuration>
<system.web>
<compilation>
<expressionBuilders>
<add expressionPrefix="MyCustomExpression"
type="MyCustomExpressionBuilder"/>
</expressionBuilders>
</compilation>
</system.web>
</configuration>
Le deuxième exemple de code montre comment référencer l’expression dans un fichier .aspx.
<asp:Label ID="Label1" runat="server"
Text="<%$ MyCustomExpression:Hello, world! %>" />
Le troisième exemple de code montre comment développer un générateur d’expressions personnalisé en dérivant de ExpressionBuilder. Pour exécuter cet exemple de code, vous devez placer la classe dans le dossier 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
Remarques
La ExpressionBuilder classe est la classe de base pour les générateurs d’expressions, tels que la classe, qui créent des expressions de code pendant l’analyse AppSettingsExpressionBuilder de page.
Les générateurs d’expressions analysent les expressions déclaratives et créent du code pour récupérer des valeurs liées à une propriété de contrôle. Dans les scénarios sans compilation, un générateur d’expressions qui prend en charge une fonctionnalité sans compilation évalue l’expression pendant l’exécution.
Lorsque l’analyseur de page rencontre une expression délimitée par la chaîne <%$ %>
, elle crée un générateur d’expressions pour l’expression en fonction du préfixe de la chaîne. Le préfixe est la partie de la chaîne à gauche du signe deux-points (:)). Par exemple, lorsque l’analyseur rencontre la chaîne <%$ ConnectionStrings:MessageDB %>
, il crée un ConnectionStringsExpressionBuilder objet. Les préfixes sont associés aux générateurs d’expressions dans le fichier Web.config dans la ExpressionBuilders section.
Le côté droit de l’expression déclarative est transmis au générateur d’expressions pour l’évaluation. Remplacez la méthode pour générer du GetCodeExpression code qui sera compilé avec la page.
Si vous souhaitez que le générateur d’expressions personnalisées soit actif sur les pages qui ne sont pas compilées, vous devez également remplacer la EvaluateExpression méthode pour renvoyer un objet qui représente les résultats de l’expression. Vous devez également remplacer la SupportsEvaluate propriété pour indiquer que le générateur d’expressions personnalisées ne prend pas en charge les pages de compilation.
Vous pouvez définir un ensemble de propriétés et de méthodes pour sélectionner et évaluer une expression associée à une propriété de contrôle au moment de la conception en implémentant un éditeur d’expression. L’éditeur est marqué sur le générateur d’expressions par le biais de métadonnées au niveau de la classe. Pour plus d'informations, consultez ExpressionEditor.
Notes pour les responsables de l’implémentation
Lorsque vous héritez de la ExpressionBuilder classe, vous devez remplacer la GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) méthode.
Constructeurs
ExpressionBuilder() |
Initialise une nouvelle instance de la classe ExpressionBuilder. |
Propriétés
SupportsEvaluate |
En cas de substitution dans une classe dérivée, retourne une valeur indiquant si l'objet ExpressionBuilder en cours prend en charge les pages sans compilation. |
Méthodes
Equals(Object) |
Détermine si l'objet spécifié est égal à l'objet actuel. (Hérité de Object) |
EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext) |
En cas de substitution dans une classe dérivée, retourne un objet qui représente une expression évaluée. |
GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) |
En cas de substitution dans une classe dérivée, retourne du code qui est utilisé pendant l'exécution de la page pour obtenir l'expression évaluée. |
GetHashCode() |
Fait office de fonction de hachage par défaut. (Hérité de Object) |
GetType() |
Obtient le Type de l'instance actuelle. (Hérité de Object) |
MemberwiseClone() |
Crée une copie superficielle du Object actuel. (Hérité de Object) |
ParseExpression(String, Type, ExpressionBuilderContext) |
En cas de substitution dans une classe dérivée, retourne un objet qui représente l'expression analysée. |
ToString() |
Retourne une chaîne qui représente l'objet actuel. (Hérité de Object) |