ExpressionBuilder Clase

Definición

Evalúa las expresiones durante el análisis de páginas.

public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
Herencia
ExpressionBuilder
Derivado

Ejemplos

En los ejemplos de código siguientes se muestra cómo crear un generador de expresiones personalizado mediante la implementación de la ExpressionBuilder clase abstracta. Esta implementación de ExpressionBuilder devuelve una instrucción evaluada que se pasa a la expresión. Para ejecutar este ejemplo, primero debe registrar el generador de expresiones personalizadas en el archivo Web.config. En el primer ejemplo de código se muestra cómo registrar el generador de expresiones personalizadas en el archivo Web.config.

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

En el segundo ejemplo de código se muestra cómo hacer referencia a la expresión en un archivo .aspx.

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

En el tercer ejemplo de código se muestra cómo desarrollar un generador de expresiones personalizado derivando de ExpressionBuilder. Para ejecutar este ejemplo de código, debe colocar la clase en la carpeta 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

Comentarios

La ExpressionBuilder clase es la clase base para los generadores de expresiones, como la AppSettingsExpressionBuilder clase , que crean expresiones de código durante el análisis de páginas.

Los generadores de expresiones analizan expresiones declarativas y crean código para recuperar valores enlazados a una propiedad de control. En escenarios sin compilación, un generador de expresiones que admite una característica sin compilación evalúa la expresión durante el tiempo de ejecución.

Cuando el analizador de páginas encuentra una expresión que está delimitada con la cadena <%$ %>, crea un generador de expresiones para la expresión basándose en el prefijo de la cadena. El prefijo es la parte de la cadena que se encuentra a la izquierda de los dos puntos (:). Por ejemplo, cuando el analizador encuentra la cadena <%$ ConnectionStrings:MessageDB %>, crea un ConnectionStringsExpressionBuilder objeto . Los prefijos están asociados con los generadores de expresiones del archivo Web.config de la ExpressionBuilders sección .

El lado derecho de la expresión declarativa se pasa al generador de expresiones para su evaluación. Invalide el GetCodeExpression método para generar código que se compilará con la página.

Si desea que el generador de expresiones personalizado esté activo en las páginas que no están compiladas, también debe invalidar el EvaluateExpression método para devolver un objeto que represente los resultados de la expresión. También debe invalidar la SupportsEvaluate propiedad para indicar que el generador de expresiones personalizadas admite páginas sin compilación.

Puede definir un conjunto de propiedades y métodos para seleccionar y evaluar una expresión asociada a una propiedad de control en tiempo de diseño mediante la implementación de un editor de expresiones. El editor se marca en el generador de expresiones mediante metadatos de nivel de clase. Para obtener más información, vea ExpressionEditor.

Notas a los implementadores

Al heredar de la ExpressionBuilder clase , debe invalidar el GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) método .

Constructores

ExpressionBuilder()

Inicializa una nueva instancia de la clase ExpressionBuilder.

Propiedades

SupportsEvaluate

Cuando se reemplaza en una clase derivada, devuelve un valor que indica si el objeto ExpressionBuilder actual admite páginas sin compilación.

Métodos

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext)

Cuando se reemplaza en una clase derivada, devuelve un objeto que representa una expresión evaluada.

GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext)

Cuando se reemplaza en una clase derivada, devuelve código que se utiliza durante la ejecución de la página para obtener la expresión evaluada.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ParseExpression(String, Type, ExpressionBuilderContext)

Cuando se reemplaza en una clase derivada, devuelve un objeto que representa una expresión analizada.

ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Se aplica a

Consulte también