0

asp.net webforms と nvelocity で拡張メソッドを使用できるかどうか疑問に思っていました。文字列値が null または空の場合、いくつかのデフォルトを設定したいと思います。

.vm ファイルの例:

    Example of my email body...

    Billable Status: $billableStatus.Evaluate()

    rest of my email body...

試行された拡張方法:

public static class Helper
{
    public static string Evaluate(this string value)
    {
        if (String.IsNullOrEmpty(value))
            return "Not Provided";
        else
            return value;
    }
}

または、私が達成しようとしていることに代わるものはありますか?

4

2 に答える 2

2

NVelocity が拡張メソッドを C#/VB.NET 構文糖衣で解決できるとは思いません。私がやっていることは、ヘルパーのインスタンスを速度コンテキストに登録することです:

var context = VelocityContext();
context.Put("helper", new Helper());
context.Put("billableStatus", "something");
...

そして、あなたのテンプレートで:

$helper.Evaluate($billableStatus)

もちろん、これを機能させるには、ヘルパーを非静的にする必要があります。

于 2011-02-22T19:46:51.490 に答える
0

私は過去に似たようなものに出くわし、より洗練された、より制御可能なものを探していました. NVelocity はメソッドとプロパティの呼び出しをインターセプトする方法を提供することがわかりましたが、そのためには特定のものを実装する必要があります。カスタム インターセプタを作成するには、NVelocity.IDuck を実装する必要があります。例えば

    パブリック クラス MyClass : NVelocity.IDuck
    {
        公開オブジェクト GetInvoke(string propName)
        {
            ....
        }

        public object Invoke(string method, params object[] args)
        {
            ....
        }

        public void SetInvoke(string propName, object value)
        {
            ....
        }
    }

これで、MyClass のすべてのインスタンスがメソッドとプロパティの呼び出しをインターセプトしてこれら 3 つの関数の実装に渡し、解決して出力を返す機会が与えられます。これら 3 つの関数シグネチャから、それらを実装するには、使用可能な拡張型でそれぞれのメソッドを見つけて実行できるリフレクションが必要になる場合があることに気付くかもしれません。必要に応じて、この方法の詳細について次のブログ投稿を読むことができます。NVelocity と拡張メソッド

于 2013-01-07T09:48:58.900 に答える