ExpressionBuilder Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Avalia expressões durante a análise de páginas.
public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
- Herança
-
ExpressionBuilder
- Derivado
Exemplos
Os seguintes exemplos de código demonstram como construir um construtor de expressões personalizado implementando a ExpressionBuilder classe abstrata. Esta implementação de ExpressionBuilder devolve uma instrução avaliada que é passada para a expressão. Para executar este exemplo, deve primeiro registar o construtor de expressões personalizado no ficheiro Web.config. O primeiro exemplo de código demonstra como registar o construtor de expressões personalizado no ficheiro 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 num ficheiro .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, 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
Observações
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áginas.
Construtores de expressões analisam expressões declarativas e criam código para recuperar valores vinculados a uma propriedade de controlo. Em cenários sem compilação, um construtor de expressões que suporta uma funcionalidade de não-compilação avalia a expressão durante a execução.
Quando o analisador de páginas encontra uma expressão delimitada pela cadeia <%$ %>, cria um construtor de expressões para a expressão baseado no prefixo da cadeia. O prefixo é a parte da corda que está à esquerda do dois-pontos (:). Por exemplo, quando o analisador encontra a cadeia <%$ ConnectionStrings:MessageDB %>, cria um ConnectionStringsExpressionBuilder objeto. Os prefixos estão associados a construtores de expressões no ficheiro Web.config da ExpressionBuilders secçã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 quiser que o construtor de expressões personalizado esteja ativo em páginas que não estão compiladas, também deve sobrescrever o EvaluateExpression método para devolver um objeto que represente os resultados da expressão. Também deve sobrescrever a SupportsEvaluate propriedade para indicar que o construtor de expressões personalizadas suporta páginas sem compilação.
Pode definir um conjunto de propriedades e métodos para selecionar e avaliar uma expressão associada a uma propriedade de controlo em tempo de design, implementando um editor de expressões. O editor é marcado no construtor de expressões através de metadados ao nível da classe. Para obter mais informações, veja ExpressionEditor.
Notas para Implementadores
Quando herdas da ExpressionBuilder classe, tens de sobrescrever o GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) método.
Construtores
| Name | Description |
|---|---|
| ExpressionBuilder() |
Inicializa uma nova instância da ExpressionBuilder classe. |
Propriedades
| Name | Description |
|---|---|
| SupportsEvaluate |
Quando sobrescrito numa classe derivada, devolve um valor que indica se o objeto atual ExpressionBuilder suporta páginas sem compilação. |
Métodos
| Name | Description |
|---|---|
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext) |
Quando sobrescrito numa classe derivada, devolve um objeto que representa uma expressão avaliada. |
| GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) |
Quando sobreposto numa classe derivada, devolve código que é usado durante a execução da página para obter a expressão avaliada. |
| GetHashCode() |
Serve como função de hash predefinida. (Herdado de Object) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| MemberwiseClone() |
Cria uma cópia superficial do atual Object. (Herdado de Object) |
| ParseExpression(String, Type, ExpressionBuilderContext) |
Quando sobrescrito numa classe derivada, devolve um objeto que representa a expressão analisada. |
| ToString() |
Devolve uma cadeia que representa o objeto atual. (Herdado de Object) |