dotspect
Project home
If you were registered and logged in, you could join this project.
Message from the owner(s)
Team Members
Pavan Podila: Principal Author
DotSpect (aka .SPECT) is a Language-Independent, Compile-time, Aspect Oriented Programming tool. Quite a mouthful :-)
Following are some of the features:
- An aspect language similar to AspectJ with some additional syntactic elements
- A simple IDE for writing and testing aspects
- Extensible Grammar for handling different types of Joinpoints
- Extensible framework for adding new languages (Default languages: C#, VB.NET)
- A command line tool for aspecting .NET assemblies. It provides similar functionality as the IDE except for invoking Reflector on the aspected assembly
Overview
DotSpect (aka .SPECT) is a tool for aspecting .NET assemblies. The advice code
can be written in any language as long as we have a compiler for that language and a mechanism to
inject in the targeted assembly. By default, .SPECT
provides support for writing aspects in C# and
VB.NET. Currently the assemblies are aspected at Compile time (Static injection).
Motivation
The reason I started working on this project is because there was no good tool
for AOP in the .NET community similar to AspectJ for Java. Most tools were either
- XML based: Problem is XML is too verbose. Aspect definitions get lost in a
sea of tags, which start looking like a porcupine. Advice code is hidden in some
class, with a reference to the class-name in the XML. Not very intuitive.
- No static injection facility. Most of the available implementations use dynamic proxies
which instruments code at runtime
Implementation
The way I have been able to solve most of these problems is as follows:
- Providing a new aspect oriented language similar to AspectJ
- Language indepedence by allowing aspect code to be written in any
language. The header section of the aspect definition specifies which
language is being used
- Extensible Grammar with support for custom handlers for various Reduction
Rules in the Parser. This makes it easy to add new types of joinpoints to the
grammar and also provide semantic support
- Factory based language integration. This allows new languages to be introduced
for writing aspects
- Providing a static injection facility that aspects assemblies at compile time.
- Developed using:
Status
The version I am working on right now includes:
- Support for call, execution joinpoints with before, after advice
- Simple IDE for writing and testing aspects
- Language support for C# and VB.NET
- Command line tool for aspecting .NET assemblies