Общий, централизованный метод регистрации параметров в C # - PullRequest
4 голосов
/ 29 декабря 2011

Рассмотрим этот фрагмент кода JavaScript:

Object.prototype.log = function() {
   // here, you have a centralized place to do logging stuff;
   console.log(this);
}

function fullName(firstName, lastName)
{
    // here, using a simple one-line code, you can log all parameters;
    arguments.log();
}

fullName('saeed', 'nemati');

Можем ли мы иметь подобный механизм для регистрации всех параметров, передаваемых в метод, в C #?

Примечание : Я использовал только отражение, но безуспешно:

public static void LogParameters(this ParameterInfo[] parameters)
{
    StringBuilder builder = new StringBuilder();
    builder.Append("*****************\r\n");
    builder.Append("Parameters\r\n");
    parameters.ToList().ForEach(pi =>
    {
        builder.AppendFormat("{0} => {1}\r\n", pi.Name, pi.DefaultValue);
        // The problem is that, I can't get the value of the parameter here
    });
    builder.Append("*****************");
    Log.Write(builder.ToString());
}

public string GetFullName(string firstName, string lastName)
{
    MethodBase.GetCurrentMethod().GetParameters().LogParameters();
    return firstName + " - " + lastName;
}

GetFullName("saeed", "neamati");

Ответы [ 2 ]

7 голосов
/ 29 декабря 2011

Нет, вы не можете получить значения параметров, используя отражение.Вам придется явно передать их в метод ведения журнала.

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

2 голосов
/ 29 декабря 2011

Вы можете сделать это с PostSharp и AOP.Вот пример, в котором также записываются параметры вызова метода.

http://blogs.lessthandot.com/index.php/WebDev/ServerProgramming/using-postsharp-and-log4net-to-set-up-co

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...