2014-12-26 2 views
1

Я занимаюсь созданием api для операций с базой данных, где я должен обернуть каждый вызов функции в api с помощью try catch. Я в основном пытаюсь получить ту же функциональность, что и декораторы в python.API-интерфейс контроллера базы данных с AOP Try Catch

Я прочитал кучу статей, и этот показался лучшим примером для подражания: http://ayende.com/blog/3474/logging-the-aop-way. Проблема, с которой я сталкиваюсь, заключается в том, что после разрешения контейнера с интерфейсом функций, которые необходимо обернуть, вы должны сделать вызов разрешенного контейнера для вызова одной из этих функций.

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

Возможно ли это? Прошу прощения, если решение прост, у меня не было большого опыта работы с C#. Спасибо.

+0

Это очень легко с PostSharp, но будет стоить вам несколько долларов. – Darek

+0

[Здесь] (https://cuttingedge.it/blogs/steven/pivot/entry.php?id=91) является моей предпочтительной техникой. – qujck

ответ

0

Если вы можете потратить несколько долларов на PostSharp, вот один из способов достижения этой цели:

[Serializable] 
public class PrintAndIgnoreExceptionAttribute : OnExceptionAspect 
{ 

    public override void OnException(MethodExecutionArgs args) 
    { 
     Console.WriteLine(args.Exception.Message); 
     args.FlowBehavior = FlowBehavior.Return; 
    } 
} 

Затем вы используете [PrintAndIgnoreException] украсить методы, которые должны быть охвачены. PostSharp также является наилучшим исполнением всех фреймворков AOP, потому что дополнительный код сплетается в посткомпиляции, поэтому нет времени исполнения. Я не работаю для них, я просто использую его практически во всем, что я делаю в эти дни.

+0

Хм, похоже, что ExceptionAspects содержатся в PostSharp Express, который является бесплатным. Если я не неправильно понимаю их сайт. – hschne

+0

Возможно, попробуйте, нет никакого вреда ... :) – Darek

+0

PostSharp не подходит для моей компании по ряду причин. Можете ли вы, ребята, подумать о каких-либо других рамках или способе кодирования того, что я пытаюсь достичь? – Tony