Метод расширения NVelocity веб-формы ASP.NET - PullRequest
0 голосов
/ 22 февраля 2011

Мне было интересно, возможно ли использовать метод расширения с веб-формами asp.net и nvelocity.Я хотел бы установить некоторые значения по умолчанию, если строковое значение равно нулю или пусто.

Пример файла .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;
    }
}

Или есть альтернатива тому, чего я пытаюсь достичь?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Я не думаю, что NVelocity может разрешать методы расширения с помощью синтаксического сахара C # / VB.NET. Что я делаю, это регистрирую экземпляр помощника в контексте скорости:

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

и затем в вашем шаблоне:

$helper.Evaluate($billableStatus)

Вы должны сделать свой помощник нестатичным, чтобы это работало, конечно.

0 голосов
/ 07 января 2013

Я сталкивался с чем-то похожим в прошлом, и я искал что-то более сложное и с большим контролем. Я обнаружил, что NVelocity обеспечивает способ перехвата вызовов методов и свойств, но для этого вам придется реализовать определенные вещи. Для того, чтобы сделать ваш собственный перехватчик, вам нужно реализовать NVelocity.IDuck. Например


    public class MyClass : NVelocity.IDuck
    {
        public object GetInvoke(string propName)
        {
            ....
        }

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

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

Теперь любой экземпляр MyClass будет перехватывать и передавать вызовы методов и свойств в нашу реализацию этих трех функций и даст нам возможность разрешить и вернуть выходные данные. Из этих трех сигнатур функций вы можете заметить, что для их реализации нам может понадобиться некоторое отражение, где мы можем найти соответствующие методы в доступных типах расширений и выполнить их. При необходимости вы можете прочитать следующее сообщение в блоге для получения более подробной информации о том, как идти по этому пути. NVelocity и методы расширения

...