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-фреймворков, потому что дополнительный код сплетен в посткомпиляции, поэтому штраф за время выполнения отсутствует. Я не работаю на них, я просто использую это почти во всем, что я делаю в эти дни.

Другие вопросы по тегам