2011-04-08 8 views

Odpowiedz

29

Można wypróbować różne IOC pojemnikach, które wyposażone AOP wyjęciu z pudełka (np Spring.Net ma potężny AOP freamework, Zamek Windsor ma Interceptors i tak nie Unity), użyj Snap z tych lub użyć IL-weaver jak Postsharp.

Aktualizacja Właśnie dowiedziałem się o „Afterthought”, która - chociaż we wczesnej fazie rozwoju - wygląda obiecująco. Ma być alternatywą OpenSource do Postsharp.

I zapomniałem wspomnieć Mono.Cecil, który jest zdolny il tkania, a także:

prostym językiem, z Cecil, można załadować istniejący zarządzanych zespoły, przeglądać wszystkie zawarte typy, modyfikować je w locie i zapisać z powrotem na dysku zmodyfikowany zespół.

Fody wykorzystuje Cecil do tkania i pozwala zintegrować ten krok w fazie budowy. Jest dostarczany z pewnymi wygodnymi dodatkami (na przykład narzędziami INotifyPropertyChanged lub generuje metodę ToString z właściwości publicznych po kompilacji).

5
+0

+1 dla PostSharp, jest bardzo potężny i naprawdę łatwy w użyciu –

8

Od lat szukam dokładnie tego samego i mogę śmiało powiedzieć, że w .Net nie ma niczego, co byłoby nawet porównywalne do AspectJ pod każdym względem.

W świecie .net, uważam, że dynamiczne proxy jest często używane jako mechanik AOP. Istnieje tylko kilka narzędzi, które obsługują faktyczne tkanie IL, takie jak Postsharp i Afterthoughts, z których oba znajdują deklaratywne programowanie z atrybutami jako sposób na Orientację Aspektów. Oba są łatwe w użyciu, ale jeśli pochodzisz z tła AOP (AspectJ), nie jestem pewny, czy będą one takie, jakie nazwałbyś AOP.

Do tej pory nie widziałem żadnej implementacji "prawdziwego" wzoru AOP (formalnie zdefiniowanego dekadę temu, tj. Punkty, połączenia, porady, aspekty itd.), Prawdopodobnie dlatego, że jest bardzo mało świadomości i zainteresowania AOP w ogóle, gdzie jego powszechne stosowanie jest zwykle ograniczone do rejestrowania, zarządzania transakcjami i polityki wyjątków, gdzie zwykle wystarczą IoC i atrybuty.

AOP dla reguł biznesowych i kodu sterowanego przez domenę jest wciąż bardzo rzadko spotykany (ani obsługiwany przez żadne narzędzie) na tym etapie w .Net.

Jest tylko jeden projekt o otwartym kodzie źródłowym, z którym ostatnio się zetknąłem, który wydaje się zaczynać wypełniać tę lukę (http://sheepaop.codeplex.com), nadal wydaje się bardzo wczesny, ale wygląda obiecująco jako implementacja AspectJ-ish. Jak już wspomniałem wcześniej, nadal nie będzie porównywać się z AspectJ (jak na twoje pytanie), ale podobieństwo jest bardzo oczywiste i wydaje się celowe.

2

Jako że pytanie dotyczy .NET, można użyć języka Nemerle, który ma potężne funkcje meta-programowania.

+1

Nemerle pozwala również kompilować źródło C# z atrybutami makr. W ten sposób można uzyskać AOP za pomocą C#. –

+0

Czy to oznacza, że ​​kompilator Nemerle zawiera kompilator C#? – ironic

+0

Tak, Nemerle może parsować źródło C# i skompilować je. Możesz dodać plik .cs do swojego projektu i to działa. Więcej możesz napisać dowolny front-end do kompilatora Nemerle, jak VB.Net, źródło jest tutaj: https://github.com/rsdn/nemerle/tree/master/snippets/csharp-parser –