Programování

Jak programovat pomocí PostSharpu v C #

Aspect Oriented Programming (AOP) je paradigma programování, které vám umožňuje definovat zásady pro bezproblémovou správu průřezových problémů v aplikacích. AOP lze využít k odstranění promíchaného kódu, zápisu čistšího kódu, zvýšení abstrakce a modularity kódu, snížení nákladů na údržbu a vývoj a zlepšení ovladatelnosti a flexibility aplikací. PostSharp je jedním z nejpopulárnějších dostupných nástrojů, které lze použít k implementaci AOP v aplikacích.

Začínáme

Chcete-li začít používat PostSharp, možná budete chtít nainstalovat nejnovější stabilní verzi pomocí konzoly Správce balíčků. Případně můžete nainstalovat PostSharp pomocí okna „Správa balíčků NuGet“. Chcete-li ve své aplikaci začít používat PostSharp, postupujte takto.

1. Otevřete Visual Studio 2015.

2. V nabídce sady Visual Studio klikněte na Soubor> Nový> Projekt.

3. Vyberte šablonu aplikace konzoly ze seznamu zobrazených šablon projektů.

4. Uložte nový projekt konzolové aplikace se jménem.

5. V nabídce sady Visual Studio klikněte na Nástroje> Správce balíčků NuGet> Správa balíčků NuGet pro řešení.

6. Vyhledejte nejnovější stabilní vydání PostSharp a klikněte na Instalovat.

A to je vše, co musíte prozatím udělat. Po zobrazení výzvy vyberte projekty, do kterých chcete nainstalovat PostSharp, a klikněte na OK. Po dokončení instalace jste připraveni používat PostSharp ve vaší aplikaci.

Programování PostSharp

Jakmile je PostSharp nainstalován, můžete jej začít používat ve své aplikaci. K tomu budete muset vytvořit jeden nebo více aspektů pro použití vaší aplikace. Jedním ze způsobů implementace AOP ve vašich aplikacích je použití atributů. Jakmile bude váš aspekt definován, budete chtít použít aspekt na svůj program pomocí atributů.

V okně Průzkumníka řešení vyberte svůj projekt, klikněte pravým tlačítkem a přidejte novou třídu s názvem ExceptionAspect. Všimněte si, že aspekt potřebný ke zpracování výjimek ve vaší aplikaci by měl být odvozen z třídy OnExceptionAspect knihovny PostSharp. OnExceptionAspect zahrnuje metodu nazvanou OnException, kterou budete muset přepsat pro zpracování výjimek. OnExceptionAspect includes a method called OnException that you'll need to override to handle exceptions. Následující kód ukazuje naši vlastní třídu aspektů výjimek.

[Serializovatelné]

veřejná třída ExceptionAspect: OnExceptionAspect

    {

public override void OnException (MethodExecutionArgs args)

        {

Console.WriteLine ("Došlo k chybě v:" +

DateTime.Now.ToShortTimeString () + "Chybová zpráva:" +

args.Exception.Message);

args.FlowBehavior = FlowBehavior.Continue;

base.OnException (args);

        }

    }

Každý aspekt by měl být serializovatelný - všimněte si použití atributu [Serializable] ve třídě ExceptionAspect zobrazené výše. Teď, když je aspekt na místě, můžete jej použít na jednu nebo více metod v aplikaci pomocí atributů. Následující fragment kódu ukazuje ukázkovou metodu pro použití právě vytvořeného aspektu výjimky.

[ExceptionAspect]

public static void TestExceptionAspect ()

  {

vyvolá novou výjimku („Toto je testovací zpráva“);

  }

Právě vytvořený aspekt vlastní výjimky můžete použít na jednu nebo více metod v aplikaci - nebo dokonce na úrovni třídy. Pokud je aspekt aplikován na úrovni třídy, budou zpracovány výjimky vyvolané kteroukoli z metod třídy. Aspekty PostSharp lze také použít v celé sestavě. Tato funkce se nazývá Multicast a lze ji použít v cílovém oboru jmen zadáním následujícího příkazu v souboru AssemblyInfo.cs:

[assembly: ExceptionAspect (AttributeTargetTypes = "PostSharp. *")]

„PostSharp. *“ Ve výše uvedeném fragmentu kódu odkazuje na všechny typy, které jsou přítomny uvnitř oboru názvů PostSharp.

Třída OnMethodBoundaryAspect umožňuje provádět vlastní kód před a po provedení metody. Zatímco jeho metoda OnEntry se provádí před provedením metody, na kterou se aspekt aplikuje, metoda OnExit se provede po provedení vaší metody. Následující výpis kódu ukazuje, jak můžete měřit čas provádění metody pomocí aspektu. Třída ExecutionTimeAspect níže odvozuje třídu OnMethodBoundaryAspect a přepíše metody OnEntry a OnExit.

 [Serializovatelné]

veřejná třída ExecutionTimeAspect: OnMethodBoundaryAspect

    {

[Neserializováno]

Stopky stopky;

public override void OnEntry (MethodExecutionArgs args)

        {

stopWatch = Stopwatch.StartNew ();

base.OnEntry (args);

        }

public override void OnExit (MethodExecutionArgs args)

        {

řetězcová metoda = nová

StackTrace (). GetFrame (1). GetMethod (). Název;

string message = string.Format ("Metoda: [{0}] byla přijata

{1} ms k provedení. ",

                        metoda, stopWatch.ElapsedMilliseconds);

Console.WriteLine (zpráva);

base.OnExit (args);

        }

    }

Můžete také vyladit metodu OnExit výše, abyste zaznamenali čas provádění metod. Teď, když je váš aspekt připraven k použití, lze jej použít na jednu nebo více metod k načtení času provedení.

[ExecutionTimeAspect]

public static void TestExceptionAspect ()

{

// Nějaký kód

}

Další informace o PostSharpu najdete v dokumentaci.