Partager via


ExpressionBuilder Classe

Définition

É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)

S’applique à

Voir aussi