ExpressionBuilder Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Vyhodnotí výrazy během analýzy stránky.
public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
- Dědičnost
-
ExpressionBuilder
- Odvozené
Příklady
Následující příklady kódu ukazují, jak vytvořit tvůrce vlastních výrazů implementací ExpressionBuilder abstraktní třídy. Tato implementace ExpressionBuilder vrátí vyhodnocený příkaz, který se předá výrazu. Pokud chcete tento příklad spustit, musíte nejprve zaregistrovat tvůrce vlastních výrazů v souboru Web.config. První příklad kódu ukazuje, jak zaregistrovat tvůrce vlastních výrazů v souboru Web.config.
<configuration>
<system.web>
<compilation>
<expressionBuilders>
<add expressionPrefix="MyCustomExpression"
type="MyCustomExpressionBuilder"/>
</expressionBuilders>
</compilation>
</system.web>
</configuration>
Druhý příklad kódu ukazuje, jak odkazovat na výraz v souboru .aspx.
<asp:Label ID="Label1" runat="server"
Text="<%$ MyCustomExpression:Hello, world! %>" />
Třetí příklad kódu ukazuje, jak vyvíjet vlastní tvůrce výrazů odvozením z ExpressionBuilder. Pokud chcete spustit tento příklad kódu, musíte třídu umístit do složky 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
Poznámky
Třída ExpressionBuilder je základní třídou pro tvůrce výrazů, jako AppSettingsExpressionBuilder je třída, která vytváří výrazy kódu během analýzy stránky.
Tvůrci výrazů parsují deklarativní výrazy a vytvářejí kód pro načtení hodnot vázaných na vlastnost ovládacího prvku. Ve scénářích bez kompilace vyhodnocuje tvůrce výrazů, který podporuje funkci bez kompilace, výraz během doby běhu.
Když analyzátor stránky narazí na výraz, který je oddělený řetězcem <%$ %>, vytvoří tvůrce výrazů pro výraz na základě předpony v řetězci. Předpona je část řetězce, která je vlevo od dvojtečky (:). Například když analyzátor narazí na řetězec <%$ ConnectionStrings:MessageDB %>, vytvoří ConnectionStringsExpressionBuilder objekt. Předpony jsou přidružené k tvůrci výrazů v souboru Web.config v oddílu ExpressionBuilders .
Pravá strana deklarativního výrazu se předá tvůrci výrazů pro vyhodnocení. Přepište metodu GetCodeExpression pro vygenerování kódu, který se zkompiluje se stránkou.
Pokud chcete, aby tvůrce vlastních výrazů byl aktivní na stránkách, které nejsou kompilovány, musíte také přepsat EvaluateExpression metodu pro vrácení objektu, který představuje výsledky výrazu. Vlastnost je také nutné přepsat SupportsEvaluate , aby bylo uvedeno, že tvůrce vlastních výrazů nepodporuje stránky bez kompilace.
Můžete definovat sadu vlastností a metod pro výběr a vyhodnocení výrazu, který je přidružen k vlastnosti ovládacího prvku v době návrhu implementací editoru výrazů. Editor je v tvůrci výrazů označen prostřednictvím metadat na úrovni třídy. Další informace najdete na webu ExpressionEditor.
Poznámky pro implementátory
Když dědíte z ExpressionBuilder třídy, je nutné přepsat metodu GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) .
Konstruktory
| Name | Description |
|---|---|
| ExpressionBuilder() |
Inicializuje novou instanci ExpressionBuilder třídy. |
Vlastnosti
| Name | Description |
|---|---|
| SupportsEvaluate |
Při přepsání v odvozené třídě vrátí hodnotu určující, zda aktuální ExpressionBuilder objekt podporuje bezkompilovat stránky. |
Metody
| Name | Description |
|---|---|
| Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
| EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext) |
Při přepsání v odvozené třídě vrátí objekt, který představuje vyhodnocený výraz. |
| GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) |
Při přepsání v odvozené třídě vrátí kód, který se používá během provádění stránky k získání vyhodnoceného výrazu. |
| GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
| GetType() |
Získá Type aktuální instance. (Zděděno od Object) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| ParseExpression(String, Type, ExpressionBuilderContext) |
Při přepsání v odvozené třídě vrátí objekt, který představuje parsovaný výraz. |
| ToString() |
Vrátí řetězec, který představuje aktuální objekt. (Zděděno od Object) |