В C #, VB.net много реализаций АОП. это некоторые из реализаций АОП:
- PostSharp
- Замок DynamicProxy
- LinFu
- LOOM.NET
- Аспект.NET
- Блок приложения для внедрения политики Enterprise Library 3.0
- AspectDNG
- DotSpect (.SPECT)
- Spring.NET Framework как часть своей функциональности
- Викка и Phx.Morph
- Исчерпывающий анализ решений AOSD для .NET можно получить в Университете Твенте.
- Seasar.NET
- Аспект №
- Головоломка.
- Написать *
- SetPoint
- NConcern .NET AOP Framework
- ...
Какая лучшая реализация для АОП в .Net? Что мне следует использовать?
Ответы:
Я думаю, что Castle Dynamic Proxy - лучшее решение, если динамический перехват может удовлетворить ваши потребности. Эта структура используется внутри множества других платформ, которые хотят предложить возможности АОП. Как правило, большинство существующих контейнеров IoC теперь предоставляют некоторые механизмы динамического перехвата (Spring.NET, Castle Windsor, StructureMap и т. Д.). Если вы уже работаете с контейнером IoC, возможно, будет проще посмотреть, что он предлагает.
Если динамический перехват не может удовлетворить ваши потребности (плетение запечатанного класса, перехват невиртуального вызова и т. Д.), Тогда вам определенно нужно статическое плетение. PostSharp - это справочник в этом домене.
Обратите внимание, что существует также Linfu , который можно использовать для использования обеих моделей АОП.
источник
«Лучший» - это субъективно.
Сначала составьте список необходимых вам функций, вашей архитектуры и т. Д. Затем поищите варианты, которые делают то, что вам нужно, без излишней сложности. Например, некоторые из них ориентированы на интерфейс: ориентирован ли ваш код в настоящее время на интерфейс? Если нет, PostSharp может быть лучшим выбором (вплетенный в исходные классы). Но, конечно, PostSharp нельзя настроить во время выполнения ... лошадей за курсами.
источник
Лучший способ заниматься аспектно-ориентированным программированием в .NET - использовать хорошо известные методы проектирования. Например, применяя принципы SOLID, вы можете добиться гибкости и модульности, которые вам необходимы, чтобы добавить сквозные проблемы. Если у вас есть правильный дизайн, вы даже сможете применять большинство сквозных проблем без какой-либо структуры. Ошибочно думать, что ООП не подходит для АОП.
Вот несколько указателей:
Когда у вас есть правильные абстракции, добавление новых сквозных проблем в систему - это просто вопрос написания нового класса декоратора и его обертывания вокруг правильных реализаций. Если абстракции являются общими, вы можете обернуть один декоратор вокруг большой группы классов (что и есть в АОП).
Хотя такие методы, как динамические прокси-серверы и переплетение кода, могут облегчить работу с плохо спроектированным приложением, альтернативы хорошему дизайну действительно нет. Рано или поздно ты обожжешься. Это не означает, что нельзя использовать динамическое создание прокси и переплетение кода. Но без правильного дизайна приложения даже эти методы будут мало полезны.
источник
Не знаю, как лучше, есть много фреймворков и недостаточно часов в день, чтобы опробовать их все.
Я использовал PostSharp и был приятно удивлен, насколько легко с ним начать.
Я также изучал АОП с Castle Windsor и Spring.Net, подход другой (время выполнения и время компиляции). Кажется, имеет смысл смешивать AOP и IoC. Когда вы еще не используете одну из этих платформ, для начала потребуется гораздо больше работы, но не позволяйте этому останавливать вас.
Для новых проектов сейчас я бы, вероятно, использовал Castle Windsor, но в основном потому, что я бы также хотел использовать IoC. Если бы мне пришлось быстро внедрить АОП в существующую базу кода, я бы использовал PostSharp.
источник
Также есть внедрение политик и перехват Unity от Microsoft.
источник