sobota, 31 maja 2008

PostSharp 1.0 RC3 wydany

Postsharp to bardzo ciekawy framework (biblioteka, mechanizm?) pozwalający zrealizować programowanie aspektowe (AOP) w .NET. Jako, że jeden przykład wart jest tysiąca słów - oto przykładowy aspekt pozwalający wywołać metodę w transakcji (opakować wywołanie metody za pomocą TransactionScope):

[Serializable]
public class TransactionScopeAttribute: OnMethodInvocationAspect
{
public override void OnInvocation(MethodInvocationEventArgs eventArgs)
{
using (var ts = new TransactionScope())
{
eventArgs.Proceed();
ts.Complete();
}
}
}


Oraz jego zastosowanie w praktyce:


class Program
{
static void Main(string[] args)
{
MyDbMethod();
}

[TransactionScope]
private static void MyDbMethod()
{
//...
}
}



Jego największą przewagą nad innymi rozwiązaniami (Policy Injection Application Block, AOP w Spring.net, itp.) jest fakt, że pozwala przechwycić praktycznie każdą metodę - nie wymaga, aby klasa implementowała interfejs, czy też dziedziczyła po MarshalByRefObject. Co więcej, umożliwia przechwytywanie wywołań konstruktorów, metod statycznych, prywatnych, itp. Tak szerokie możliwości wynikają z odmiennego mechanizmu działania. PostSharp po wygenerowaniu assembly modyfikuje kod IL wszystkich przechwytywanych metod, tak aby umożliwić przechwycenie wywołania.



Warto zaznaczyć, że framework jest darmowy i ma otwarty kod źródłowy (na licencji GPL/LGPL v3).



Wiecej informacji na stronie projektu.



PS. Zgodnie z informacją na blogu, PostSharp będzie prezentowany na CodeCamp 7 czerwca w Krakowie. Uważam, że tej prezentacji nie można przegapić!

Brak komentarzy: