Подтвердить что ты не робот

Любая зрелая библиотека AOP для использования в мире .Net?

Библиотека должна по крайней мере сравнивать с AspectJ, любой?

4b9b3361

Ответ 1

Вы можете попробовать различные контейнеры для IOC, в которых есть AOP из коробки (например, Spring.Net имеет мощный AOP freamework, Castle Windsor имеет Interceptors, и поэтому Unity), используйте Snap с этими или использовать IL-Weaver как Postsharp.

Обновление Я только что узнал о "Afterthought, который, хотя и в начале разработки, выглядит многообещающим. Он нацелен на альтернативу OpenSource для Postsharp.

И я забыл упомянуть Mono.Cecil, способный к иному плетению:

На простом английском языке с помощью Cecil вы можете загружать существующие управляемые сборки, просматривать все содержащиеся в нем типы, изменять их на лету и сохранять обратно на диск измененную сборку.

Fody использует Cecil для плетения и позволяет интегрировать этот шаг в фазе сборки. Он поставляется с некоторыми удобными дополнениями (например, реализует INotifyPropertyChanged или генерирует метод ToString из общедоступных свойств после компиляции).

Ответ 2

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

В мире .net я обнаружил, что динамический прокси часто используется как механик АОП. Есть только несколько инструментов, которые поддерживают фактическое ИЛ-плетение, такое как Postsharp и Afterthoughts, оба из которых находят декларативное программирование с атрибутами в качестве способа ориентации Ориентации. Оба они просты в использовании, но если вы пришли из фона AOP (AspectJ), я не уверен, что они будут тем, что вы назвали бы АОП.

До сих пор я не видел никакой реализации .NET-схемы "истинного" AOP (как это было формально определено десять лет назад, т.е. pointcuts, joinpoints, advice, аспекты и т.д.), вероятно, потому, что очень мало осведомленности и интереса к AOP в общем, где его общее использование обычно ограничено протоколированием, управлением транзакциями и политикой исключения, где обычно достаточны IoC и атрибуты.

AOP для бизнес-правил и кода, управляемого доменом, по-прежнему очень редко просматривается (и не поддерживается каким-либо инструментом) на этом этапе в .Net.

Есть только один проект с открытым исходным кодом, который я недавно встретил, похоже, начинает заполнять этот пробел (http://sheepaop.codeplex.com), все еще кажется очень рано, но выглядит перспективным как реализация AspectJ-ish. Как я сказал ранее, он по-прежнему не будет сравниваться с AspectJ (согласно вашему вопросу), но ressemblance чрезвычайно очевидно и кажется преднамеренным.

Ответ 4

В качестве вопроса о .NET вы можете использовать Nemerle язык, который обладает мощными функциями метапрограммирования.