ExpressionBuilder Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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) |