#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}
и в консольном приложении вы можете создать три метода
- вы хотите запустить перед своим методом (до завершения)
- вы хотите запустить свой метод после выполнения (afterExecute)
- содержащий вызов методов в этом порядке перед выполнением() 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 Я также обновил ответ, чтобы добавить свое предложение для консольного приложения в ответ