Как мы можем применить атрибуты к функции класса с помощью АОП в C #?
ОБНОВЛЕНИЕ: мне немного непонятно, в каком контексте следует использовать АОП? Поскольку мы можем использовать АОП для целей ведения журнала, безопасности (аутентификации), пожалуйста, предложите некоторые другие сценарии, в которых мы можем воспользоваться преимуществами АОП.
Можно ли использовать АОП для обмена данными между различными запущенными потоками в процессе приложения?
Ответ 1 · рейтинг 4 · Noon Silk
В C # нет большой поддержки АОП.
Существует структура, PostSharp, на которую вы, возможно, захотите изучить. Он, вероятно, даст вам то, что вы хотите, но никогда не будет так хорошо, как Java.
-- Редактировать
Если вы не хотите использовать Framework, как PostSharp, изучите класс ContextBoundObject, а также (IIRC) DynamicProxy. Но оба из них требуют либо изменения вашей цепочки наследования, либо изменения способа создания экземпляров объектов.
Ответ 2 · рейтинг 5 · Alfamale
АОП разработан, чтобы охватить то, что он называет сквозными проблемами, то есть функциональность, которая требуется для многих объектов в системе, но которая не является основной для интересов этих объектов. Если такие требования удовлетворяются путем кодирования сквозной проблемы в объектах по всей системе, мы получаем беспорядочную, сложную в обслуживании реализацию, разделенную на множество объектов.
Классическим примером сквозной проблемы является ведение журнала: ведение журнала важно для реальной, действующей системы и должно быть реализовано во всей системе, но на самом деле не является проблемой для объектов в этой системе: система em> может потребоваться объект расчета налога с продаж для реализации регистрации, но регистрация на самом деле не является проблемой самого объекта расчета налога с продаж. АОП позволяет нам определять эти общесистемные (сквозные) требования отдельно от нашей основной бизнес-логики, а затем связывать их вместе, либо во время выполнения, либо во время компиляции.
АОП работает путем перехвата вызовов методов объектов. Точки перехвата известны как pointcuts, а перехваченный метод - это рекомендуемый метод, а код, сообщающий о перехваченном методе, известен как совет. Я знаком с АОП только через Spring.Net AOP Framework, который позволяет вам указывать и применять pointcut и советы как через файлы конфигурации, так и программно. Spring.Net AOP имеет четыре типа рекомендаций: до, после, вокруг и выбросы, которые вызываются при перехвате рекомендованного метода до вызова рекомендованного метода, после вызывается как до, так и после его вызова и при возникновении исключения соответственно. Независимо от того, применяется ли он через конфигурацию или программно, метод advice ничего не знает о Spring.Net AOP или даже о том, что он был рекомендован.
Другой пример использования АОП - транзакции. Если мы попытаемся реализовать это в коде внутри объектов, мы получим объекты, которые должны знать, что они действуют в рамках транзакции, что, на мой взгляд, не является желательной особенностью дизайна. АОП позволяет нам создавать и координировать транзакции извне по отношению к объектам, участвующим в транзакции, что может дать гораздо более стабильный и удобный в обслуживании дизайн.
Документация Spring.Net очень хорошо объясняет АОП в целом и реализацию АОП в Spring.Net в частности и содержит множество примеров. На него стоит взглянуть, даже если вы не планируете использовать фреймворк Spring.Net AOP.