Compartilhar via


ExpressionBuilder Classe

Definição

Avalia expressões durante a análise da página.

public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
Herança
ExpressionBuilder
Derivado

Exemplos

Os exemplos de código a seguir demonstram como criar um construtor de expressões personalizado implementando a ExpressionBuilder classe abstrata. Essa implementação de ExpressionBuilder retorna uma instrução avaliada que é passada para a expressão. Para executar este exemplo, primeiro você deve registrar o construtor de expressões personalizadas no arquivo Web.config. O primeiro exemplo de código demonstra como registrar o construtor de expressões personalizadas no arquivo Web.config.

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

O segundo exemplo de código demonstra como referenciar a expressão em um arquivo .aspx.

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

O terceiro exemplo de código demonstra como desenvolver um construtor de expressões personalizado derivando de ExpressionBuilder. Para executar este exemplo de código, você deve colocar a classe na pasta 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

Comentários

A ExpressionBuilder classe é a classe base para construtores de expressões, como a AppSettingsExpressionBuilder classe, que criam expressões de código durante a análise de página.

Os construtores de expressões analisam expressões declarativas e criam código para recuperar valores associados a uma propriedade de controle. Em cenários sem compilação, um construtor de expressões que dá suporte a um recurso sem compilação avalia a expressão durante o tempo de execução.

Quando o analisador de página encontra uma expressão delimitada com a cadeia <%$ %>de caracteres, ela cria um construtor de expressões para a expressão com base no prefixo na cadeia de caracteres. O prefixo é a parte da cadeia de caracteres à esquerda dos dois-pontos (:). Por exemplo, quando o analisador encontra a cadeia <%$ ConnectionStrings:MessageDB %>de caracteres, ele cria um ConnectionStringsExpressionBuilder objeto. Os prefixos estão associados a construtores de expressões no arquivo Web.config na ExpressionBuilders seção.

O lado direito da expressão declarativa é passado para o construtor de expressões para avaliação. Substitua o GetCodeExpression método para gerar código que será compilado com a página.

Se você quiser que o construtor de expressões personalizadas esteja ativo em páginas que não são compiladas, você também deve substituir o EvaluateExpression método para retornar um objeto que representa os resultados da expressão. Você também deve substituir a SupportsEvaluate propriedade para indicar que o construtor de expressões personalizadas dá suporte a páginas sem compilação.

Você pode definir um conjunto de propriedades e métodos para selecionar e avaliar uma expressão associada a uma propriedade de controle em tempo de design implementando um editor de expressões. O editor é marcado no construtor de expressões por meio de metadados de nível de classe. Para obter mais informações, consulte ExpressionEditor.

Notas aos Implementadores

Ao herdar da ExpressionBuilder classe, você deve substituir o GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) método.

Construtores

ExpressionBuilder()

Inicializa uma nova instância da classe ExpressionBuilder.

Propriedades

SupportsEvaluate

Quando substituído em uma classe derivada, retorna um valor que indica se o objeto ExpressionBuilder atual dá suporte às páginas sem compilação.

Métodos

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

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

Quando substituído em uma classe derivada, retorna um objeto que representa uma expressão avaliada.

GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext)

Quando substituído em uma classe derivada, retorna o código que é usado durante a execução da página para obter a expressão avaliada.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

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

Quando substituído em uma classe derivada, retorna um objeto que representa uma expressão analisada.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Aplica-se a

Confira também