Я сталкивался с чем-то похожим в прошлом, и я искал что-то более сложное и с большим контролем. Я обнаружил, что 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 и методы расширения