Вот то, что я придумал как решение:
PostSharp или другое решение АОП не очень практично в этой ситуации, поэтому, к сожалению, мне пришлось отказаться от этой идеи.
Похоже, что хотя имена и типы параметров можно использовать с помощью отражения, единственный способ получить доступ к значениям времени выполнения - подключить отладчик.
Смотрите здесь для получения дополнительной информации:
StackOverflow
microsoft.public.dotnet.framework
Так что это все еще оставляло меня с проблемой ~ 50 методов, которые нуждались в этом добавлении регистрации вручную.
Отражение на помощь ...
public String GetMethodParameterArray()
{
var output = new StringBuilder();
output.AppendLine();
Type t = typeof(API);
foreach (var mi in t.GetMethods())
{
var argsLine = new StringBuilder();
bool isFirst = true;
argsLine.Append("object[] args = {");
var args = mi.GetParameters();
foreach (var pi in args)
{
if (isFirst)
{
isFirst = false;
}
else
{
argsLine.Append(", ");
}
argsLine.AppendFormat("{0}", pi.Name);
}
argsLine.AppendLine("};"); //close object[] initialiser
output.AppendLine(argsLine.ToString());
output.AppendFormat("Log(\"{0}\",args);", mi.Name);
output.AppendLine();
output.AppendLine();
}
return output.ToString();
}
Этот фрагмент кода перебирает методы класса и выводит массив object [], инициализированный аргументами, передаваемыми в метод, и вызов Log, содержащий аргументы и имя метода.
Пример вывода:
object[] args = {username, password, name, startDate, endDate, cost};
Log("GetAwesomeData",args);
Этот блок может быть вставлен в начало метода для достижения требуемого эффекта.
Это более ручное руководство, чем мне бы хотелось, но это намного лучше, чем ввод параметров вручную, и гораздо менее подвержено ошибкам.