Каковы лучшие / наиболее популярные способы сделать аспектно-ориентированное программирование (AOP) в C # /. Net? - PullRequest
4 голосов
/ 25 сентября 2008

Каковы лучшие / самые популярные способы выполнения аспектно-ориентированного программирования (AOP) в C # /. Net?

Ответы [ 5 ]

6 голосов
/ 25 сентября 2008
  • DynamicProxy от Castle is вероятно, наиболее используемый инструмент для делает АОП на CLR.
  • Пружинные рамки также предлагает Возможности АОП через его Spring.Aop пространство имен.
3 голосов
/ 25 сентября 2008

Postsharp - это еще одна известная проблема: «Внесение AOP в .NET!» У меня очень мало опыта, но он выглядит красиво и стоит на него взглянуть.

2 голосов
/ 24 июля 2009

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

Ознакомьтесь с примерами кода на домашней странице PostSharp. Это хорошие примеры простых аспектов, сделанных с помощью PostSharp.

1 голос
/ 08 апреля 2010

Я использую Spring.Net AOP Framework уже около 9 месяцев. Он довольно мощный и, похоже, не налагает снижения производительности при использовании, хотя переплетение выполняется во время выполнения, а не во время компиляции. Единственное, о чем нужно знать, это то, что хотя объектам, к которым вы применяете советы, не нужно знать о Spring.Net AOP, они должны реализовывать хотя бы один интерфейс. Документация, которая, кстати, для Spring.Net в целом отличная, гласит, что это ограничение будет снято в будущей версии, но не дает дорожной карты.

Spring.Net AOP не требует использования остальной части среды Spring.Net и может использоваться отдельно.

0 голосов
/ 25 сентября 2008

Я поиграл, катаясь самостоятельно, для нескольких разных типов вещей. Мне повезло. В общем, я делаю интерфейс, реализую его с помощью класса, а затем создаю прокси-сервер, который реализует интерфейс, выполняет все необходимые этапы предусловия, вызывает метод реального объекта и затем выполняет любые этапы постусловия, которые я хочу. Одно из главных неудобств, связанных с этим подходом, заключается в том, что у вас не может быть конструкторов в интерфейсе, и у вас также не может быть статических методов в интерфейсе, поэтому нет реального очевидного места для размещения кода такого типа. Сложная часть - это генерация кода - потому что вы либо собираетесь выдавать IL, либо вы собираетесь испускать C #, который нужно скомпилировать. Но это был только мой подход. И это заставило меня задуматься об одном аспекте за один раз - на самом деле я не дошел до того, что смог бы абстрагироваться от «Аспекта» и мыслить в этих терминах. Короче говоря: сверните свой собственный или найдите понравившийся набор инструментов, вероятно, из списка Эрика Боддена .

...