API контроллера базы данных с AOP Try Catch
Я нахожусь в процессе создания API для операций с базой данных, где я должен обернуть каждый вызов функции в API с попыткой catch. Я в основном пытаюсь получить ту же функциональность, что и декораторы в Python.
Я прочитал кучу статей, и эта статья показалась мне лучшим примером для подражания: http://ayende.com/blog/3474/logging-the-aop-way. Проблема, с которой я столкнулся, заключается в том, что после разрешения контейнера с интерфейсом функций, которые необходимо обернуть, необходимо выполнить вызов разрешенного контейнера для вызова одной из этих функций.
Я бы хотел, чтобы пользователь моего контроллера мог просто позвонить моему классу, который реализует вышеупомянутый интерфейс, и ничего не знать о том, что я сделал внутренне, в том, что касается try try catch.
Это возможно? Я извиняюсь, если решение простое, у меня не было большого опыта с C#. Благодарю.
1 ответ
Если вы можете потратить несколько долларов на PostSharp, вот один из способов сделать это:
[Serializable]
public class PrintAndIgnoreExceptionAttribute : OnExceptionAspect
{
public override void OnException(MethodExecutionArgs args)
{
Console.WriteLine(args.Exception.Message);
args.FlowBehavior = FlowBehavior.Return;
}
}
Тогда вы используете [PrintAndIgnoreException]
украсить ваши методы, которые должны быть покрыты. PostSharp также является наиболее эффективным из всех AOP-фреймворков, потому что дополнительный код сплетен в посткомпиляции, поэтому штраф за время выполнения отсутствует. Я не работаю на них, я просто использую это почти во всем, что я делаю в эти дни.