AOP Logging понимание - PullRequest
       13

AOP Logging понимание

0 голосов
/ 09 января 2019

Я работал над тем, как я могу использовать Аспектно-ориентированное программирование, и для начала следовал этому учебному пособию . У меня это работает здесь, поэтому у меня есть до и после регистрации вызовов метода. Затем я захотел использовать этот регистратор для остальной части регистрации, которую мы обычно выполняем внутри и вокруг рассматриваемого объекта. Все, что мне нужно было сделать, чтобы это работало, это изменить последнюю строку SetParameters с:

 _loggingScheduler = loggingScheduler ?? TaskScheduler.FromCurrentSynchronizationContext();

до

_loggingScheduler = loggingScheduler ?? TaskScheduler.Current;

Не уверен, почему это работает для меня, но это так. Затем я захотел использовать этот аспект / оформление, чтобы выполнить остальную часть регистрации, которая нам потребуется. Поэтому я добавил метод журнала к аспекту и использовал его соответствующим образом:

public void Log(string level, string msg)
{
     Console.WriteLine($"{level} {DateTime.Now.ToString("s")} {msg}");
}

Так что пока просто ведение журнала консоли. Я использовал этот метод так:

public static void Main(string[] args)
{
    var calculator = LoggingAdvice<ICalculator>.Create(
                              new Calculator(),
                              s => Console.WriteLine("Info: " + s),
                              s => Console.WriteLine("Error: " + s),
                              o => o?.ToString());

    var addition = calculator.Add(2, 2);
    ((LoggingAdvice<ICalculator>)calculator).Log("Info", $"The result of Add was {addition}");

    var subtraction = calculator.Subtract(10, 4);
    ((LoggingAdvice<ICalculator>)calculator).Log("Info", $"The result of Subtract was {subtraction}");



    Console.WriteLine($"Results: Add - {addition}, subtract - {subtraction}");
    Console.Read();
}

Реально это просто дублирование функциональности LogAfter(). Я думал, что смогу добиться этого, используя аспект всех необходимых мне журналов:

  • До и после вызова метода (отметка)
  • Используйте его для навигации по объекту (отметьте галочкой)
  • Вход в калькулятор (полностью застрял)

Теперь я начинаю кружить вокруг себя, и мое понимание того, что я здесь делаю, уменьшается.

Итак, мои вопросы:

  • Что я здесь делаю - шаблон AOP, Decorator или Proxy (вероятно, микс)
  • Могу ли я использовать аспект внутри украшенного объекта
  • Должен ли я по-прежнему вводить регистратор в мои классы для внутренней регистрации
  • Какое нарушение произнесено калькулятором

Так что, в основном, я немного жадный и хочу использовать аспект, который я создал, для всей моей регистрации. Это возможно?

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