Вы неправильно понимаете пример, позвольте мне уточнить.
В примере кода есть два вида регистрации.Вы нашли очевидное, activity.Write(xxx)
.Этот вид регистрации не покрывается использованием AOP-фреймворка, такого как PostSharp.Этот вид ведения журнала можно рассматривать как часть бизнес-логики, поскольку он специфичен для выполняемых действий.
Теперь, с другой стороны: давайте предположим, что вы хотите регистрировать каждый и все вызовы для всехметоды в вашем приложении.Вы хотите войти, когда метод вызывается и с какими параметрами.Кроме того, вы хотите записать возвращенное значение, если оно есть.
Представьте, что для каждого метода нужно написать что-то вроде этого:
bool SomeMethod(int input)
{
var sw = Stopwatch.StartNew();
logger.Write($"Started executing {nameof(SomeMethod)} at {DateTime.Now}. Value of {nameof(input)}: {input})";
... // some work
var returnValue = false;
sw.Stop();
logger.Write($"Finished executing {nameof(SomeMethod)}. It took {sw.ElapsedMilliseconds}ms. Returned value: {returnValue}");
return returnValue;
}
Теперь , что является крестикоми , что - это то, что демонстрирует пример.Этот сантехнический код вводится PostSharp, просто делая это в program.cs :
using PostSharp.Patterns.Diagnostics;
using PostSharp.Patterns.Diagnostics.Backends.Serilog;
using PostSharp.Samples.Logging.BusinessLogic;
using Serilog;
// Add logging to all methods of this project.
[assembly: Log]
...
Подробнее здесь
Теперь, наВ конце давайте вернемся к вашему вопросу:
Может ли кто-нибудь помочь мне отделить выход из MVC-проекта с помощью PostSharp.Patterns.Diagnostics.Backends.Serilog?
Я не уверен, что вы ожидаете от какой-либо инфраструктуры AOP в отношении настраиваемой регистрации в коде бизнес-логики.Не могли бы вы расширить это?Или приведенного выше пояснения достаточно?
Редактировать: решение проблем из вашего комментария
- Я не думаю, что пример PostSharp является примером DDD.Они просто демонстрируют, что регистратор, используемый для аспекта, может также использоваться для регистрации информации, связанной с бизнесом (объект помечен для удаления.) В DDD, если эта информация имеет отношение к кому-либо или чему-либо, это будет событие, которое может быть зарегистрировано с использованием аспекта.
- Создание контрольного журнала с использованием аспектов аудита для записи событий, безусловно, является правильным способом сделать это.Что касается уровня представления, вы можете использовать некоторое промежуточное программное обеспечение для регистрации запросов и ответов, например, как показано здесь .В этом случае нет необходимости использовать PostSharp.В зависимости от вашего кода событий в приложении DDD, вы можете перехватывать события до или после их отправки, чтобы вы могли также записывать свои собственные записи в журнал, устраняя необходимость в PostSharp.
- Пробовали ли вышаги слушали в ответах на вопрос, который был отмечен как дубликат?