次の方法で共有


ExpressionBuilder クラス

定義

ページ解析中に式を評価します。

public ref class ExpressionBuilder abstract
public abstract class ExpressionBuilder
type ExpressionBuilder = class
Public MustInherit Class ExpressionBuilder
継承
ExpressionBuilder
派生

次のコード例は、抽象クラスを実装してカスタム式ビルダーを構築する方法を ExpressionBuilder 示しています。 この実装は ExpressionBuilder 、式に渡される評価されたステートメントを返します。 この例を実行するには、最初にカスタム式ビルダーをWeb.config ファイルに登録する必要があります。 最初のコード例では、Web.config ファイルにカスタム式ビルダーを登録する方法を示します。

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

2 番目のコード例では、.aspx ファイルで式を参照する方法を示します。

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

3 番目のコード例では、次から ExpressionBuilder派生してカスタマイズされた式ビルダーを開発する方法を示します。 このコード例を実行するには、クラスを 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

注釈

この ExpressionBuilder クラスは、ページ解析中にコード式を AppSettingsExpressionBuilder 作成する、クラスなどの式ビルダーの基本クラスです。

式ビルダーは宣言式を解析し、コントロール プロパティにバインドされた値を取得するコードを作成します。 コンパイルなしのシナリオでは、コンパイルなしの機能をサポートする式ビルダーは、実行時に式を評価します。

ページ パーサーは、文字列で区切られた式を検出すると、文字列 <%$ %>内のプレフィックスに基づいて式の式ビルダーを作成します。 プレフィックスは、コロン (:)) の左側にある文字列の部分です。 たとえば、パーサーが文字列 <%$ ConnectionStrings:MessageDB %>を検出すると、オブジェクトが ConnectionStringsExpressionBuilder 作成されます。 プレフィックスは、セクションのWeb.config ファイル内の式ビルダーに ExpressionBuilders 関連付けられます。

宣言式の右側は、評価のために式ビルダーに渡されます。 メソッドを GetCodeExpression オーバーライドして、ページでコンパイルされるコードを生成します。

コンパイルされていないページでカスタム式ビルダーをアクティブにする場合は、式の結果を EvaluateExpression 表すオブジェクトを返すようにメソッドをオーバーライドする必要もあります。 カスタム式ビルダーがコンパイルなしのページを SupportsEvaluate サポートしていることを示すためにも、プロパティをオーバーライドする必要があります。

式エディターを実装することで、デザイン時にコントロール プロパティに関連付けられている式を選択および評価するためのプロパティとメソッドのセットを定義できます。 エディターは、クラス レベルのメタデータによって式ビルダーでマークされます。 詳細については、「ExpressionEditor」を参照してください。

注意 (実装者)

クラスから ExpressionBuilder 継承する場合は、メソッドをオーバーライドする GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext) 必要があります。

コンストラクター

ExpressionBuilder()

ExpressionBuilder クラスの新しいインスタンスを初期化します。

プロパティ

SupportsEvaluate

派生クラスでオーバーライドされた場合は、現在の ExpressionBuilder オブジェクトがコンパイルなしページをサポートするかどうかを示す値を返します。

メソッド

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
EvaluateExpression(Object, BoundPropertyEntry, Object, ExpressionBuilderContext)

派生クラスでオーバーライドされた場合は、評価された式を表すオブジェクトを返します。

GetCodeExpression(BoundPropertyEntry, Object, ExpressionBuilderContext)

派生クラスでオーバーライドされた場合、評価された式を取得するためにページ実行中に使用されるコードが返されます。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ParseExpression(String, Type, ExpressionBuilderContext)

派生クラスでオーバーライドされた場合は、解析された式を表すオブジェクトを返します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)

適用対象

こちらもご覧ください