Esta documentación está archivada y no tiene mantenimiento.

ExpressionBuilder (Clase)

Actualización: noviembre 2007

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

Espacio de nombres:  System.Web.Compilation
Ensamblado:  System.Web (en System.Web.dll)

[AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public abstract class ExpressionBuilder
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal) */
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal) */
public abstract class ExpressionBuilder
public abstract class ExpressionBuilder

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

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

Cuando el analizador de páginas encuentra una expresión 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 situada a la izquierda del signo de dos puntos (:). Por ejemplo, cuando el analizador encuentra la cadena <%$ ConnectionStrings:MessageDB %>, crea un objeto ConnectionStringsExpressionBuilder. Los prefijos se asocian con los generadores de expresiones en la sección ExpressionBuilders del archivo Web.config.

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

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

Se 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; para ello, implemente un editor de expresiones. El editor se marca en el generador de expresiones mediante metadatos del nivel de clase. Para obtener más información, vea ExpressionEditor.

Notas para los herederos:

Al heredar de la clase ExpressionBuilder, es necesario reemplazar el método GetCodeExpression.

Los ejemplos de código siguientes muestran cómo generar un generador de expresiones personalizado implementando la clase abstracta ExpressionBuilder. Esta implementación de ExpressionBuilder devuelve una instrucción evaluada que se pasa a la expresión. Para ejecutar este ejemplo, en primer lugar debe registrar el generador de expresiones personalizado en el archivo Web.config. El primer ejemplo de código muestra cómo registrar el generador de expresiones personalizado en el archivo Web.config.

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

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

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

El tercer ejemplo de código muestra cómo desarrollar un generador de expresiones personalizado mediante una derivación 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; }
    }
}


Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0
Mostrar: