Как использовать фильтр действий в консольном приложении Winform App ИЛИ любом методе класса в C#

#c# #asp.net #visual-studio #c#-4.0

Вопрос:

Я Хочу Регистрировать, когда началось выполнение любого метода и когда выполнение этого метода завершено. поэтому в MVC я могу использовать фильтр действий, но я хочу, чтобы то же самое было реализовано в консольном приложении, а также в приложении Winform, я проверил, есть ли Постшарп, например, пакет NuGet доступен, но я не хочу его использовать.

итак, есть ли какой-либо другой способ реализовать подобные вещи?

Комментарии:

1. Проблема в том, что вы хотите добавить некоторую автоматически добавляемую «отладочную» информацию в свою программу. У меня тоже было такое желание, но в итоге я получил профилировщик производительности. Потому что вы не хотите изменять функциональность программы. Если вам это нужно внутри вашей программы, потому что это необходимая функциональность, вы должны добавить ее в метод или обернуть методы.

Ответ №1:

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

OnActionExecuted(ActionExecutedContext) Вызывается после выполнения метода действия.

OnActionExecuting(ActionExecutingContext) Вызывается до выполнения метода действия.

OnResultExecuted(ResultExecutedContext) Вызывается после выполнения результата действия.

OnResultExecuting(ResultExecutingContext) Вызывается до выполнения результата действия.

    public class GenerateLogsAttribute : ActionFilterAttribute
            {
    //excuted after actionmethod returns
                public override void OnResultExecuted(ResultExecutedContext filterContext)
                {
                   //this code will execute when actionmethod has returned
                }
      public override void OnActionExecuting(ResultExecutedContext filterContext)
                {
                   //this code will start running before action methods start execute
                }
            }
 

Теперь у вас есть возможность украсить свой метод действий атрибутом вашего пользовательского фильтра действий (исключите слово атрибута) здесь в нашем случае это будет

   [GenerateLogs]
  public IActionResult YourMethod(){//your code}
 

и в консольном приложении вы можете создать три метода

  1. вы хотите запустить перед своим методом (до завершения)
  2. вы хотите запустить свой метод после выполнения (afterExecute)
  3. содержащий вызов методов в этом порядке перед выполнением() yourmethod() afterexecute()
      public string AnotherFunction()
     {
     BeforeExecuting(); //code that you want to run before method start
     YourMethod(); // your actual code
     AfterExecuting(); // code that you want to run after methods has 
     returned
     }
     

Комментарии:

1. но у меня есть традиционное приложение winform и консольное приложение, где метод класса не является действием контроллера, чем эта работа ?

2. я реализовал метод в классе в приложении MVC, но он не работает

3. @kailash, тогда этот метод не сработал бы. другой подход заключается в том, что вы создаете три дополнительных метода в классе или можете находиться в базовом классе, а затем вызываете эти методы до и после вызова метода public string AnaotherFunction() { Перед выполнением(); youFunction(); После выполнения(); }

4. @kailash Я также обновил ответ, чтобы добавить свое предложение для консольного приложения в ответ