Programovanie

Ako programovať pomocou PostSharpu v C #

Aspect Oriented Programming (AOP) je paradigma programovania, ktorá vám umožňuje definovať politiky na bezproblémové riadenie prierezových problémov v aplikáciách. Pomocou AOP je možné odstrániť zmiešaný kód, zapísať čistší kód, zvýšiť abstrakciu a modularitu kódu, znížiť náklady na údržbu a vývoj a urobiť aplikácie lepšie spravovateľnými a flexibilnými. PostSharp je jedným z najpopulárnejších dostupných nástrojov, ktorý možno použiť na implementáciu AOP v aplikáciách.

Začíname

Ak chcete začať používať PostSharp, možno budete chcieť nainštalovať najnovšie stabilné vydanie pomocou konzoly Package Manager Console. Prípadne môžete nainštalovať PostSharp pomocou okna „Správa balíkov NuGet“. Ak chcete začať používať aplikáciu PostSharp vo svojej aplikácii, postupujte podľa týchto pokynov.

1. Otvorte Visual Studio 2015.

2. V ponuke Visual Studio kliknite na Súbor> Nové> Projekt.

3. V zozname zobrazených šablón projektu vyberte šablónu aplikácie Console.

4. Uložte nový projekt konzolovej aplikácie s názvom.

5. V ponuke Visual Studio kliknite na Nástroje> Správca balíkov NuGet> Spravovať balíčky NuGet pre riešenie.

6. Vyhľadajte najnovšie stabilné vydanie PostSharp a kliknite na tlačidlo Inštalovať.

A to je zatiaľ všetko, čo musíte urobiť. Po zobrazení výzvy vyberte projekt (y), v ktorom chcete nainštalovať program PostSharp, a kliknite na tlačidlo OK. Po dokončení inštalácie ste pripravení používať PostSharp vo svojej aplikácii.

Programovanie PostSharp

Po nainštalovaní aplikácie PostSharp ju môžete začať používať vo svojej aplikácii. Aby ste to dosiahli, budete musieť vytvoriť jeden alebo viac aspektov, ktoré bude vaša aplikácia používať. Jedným zo spôsobov implementácie AOP do vašich aplikácií je použitie atribútov. Po definovaní vášho aspektu budete chcieť aspekt použiť vo svojom programe pomocou atribútov.

V okne Prieskumník riešení vyberte svoj projekt, kliknite pravým tlačidlom myši a pridajte novú triedu s názvom ExceptionAspect. Upozorňujeme, že aspekt potrebný na spracovanie výnimiek vo vašej aplikácii by mal pochádzať z triedy OnExceptionAspect knižnice PostSharp. OnExceptionAspect obsahuje metódu nazvanú OnException, ktorú budete musieť prepísať, aby ste zvládli výnimky. Nasledujúci kód ilustruje našu vlastnú triedu aspektov výnimiek.

[Serializovateľné]

verejná trieda ExceptionAspect: OnExceptionAspect

    {

verejné prepísanie void OnException (MethodExecutionArgs args)

        {

Console.WriteLine ("Chyba sa vyskytla o:" +

DateTime.Now.ToShortTimeString () + "Chybové hlásenie:" +

args.Exception.Message);

args.FlowBehavior = FlowBehavior.Continue;

base.OnException (args);

        }

    }

Každý aspekt by mal byť serializovateľný - všimnite si použitie atribútu [Serializable] v triede ExceptionAspect uvedenej vyššie. Teraz, keď je aspekt na mieste, môžete ho použiť na jednu alebo viac metód v aplikácii pomocou atribútov. Nasledujúci úryvok kódu ilustruje ukážkovú metódu uplatnenia práve vytvoreného aspektu výnimky.

[ExceptionAspect]

public static void TestExceptionAspect ()

  {

vyvolať novú výnimku („Toto je testovacia správa“);

  }

Práve vytvorený aspekt vlastnej výnimky môžete použiť na jednu alebo viac metód v aplikácii - alebo dokonca na úrovni triedy. Ak sa aspekt použije na úrovni triedy, budú sa spracovávať výnimky vyvolané ktoroukoľvek z metód triedy. Aspekty PostSharp možno tiež použiť v celej zostave. Táto funkcia je známa ako Multicast a je možné ju použiť na cieľový priestor mien zadaním nasledujúceho príkazu v súbore AssemblyInfo.cs:

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

„PostSharp. *“ Vo vyššie uvedenom útržku kódu označuje všetky typy, ktoré sú prítomné vo vnútri menného priestoru PostSharp.

Trieda OnMethodBoundaryAspect vám umožňuje vykonávať vlastný kód pred a po vykonaní metódy. Zatiaľ čo jeho metóda OnEntry sa vykonáva pred vykonaním metódy, na ktorú sa aspekt aplikuje, metóda OnExit sa vykoná po vykonaní vašej metódy. Nasledujúci zoznam kódov ilustruje, ako môžete merať čas vykonania metódy pomocou aspektu. Trieda ExecutionTimeAspect uvedená nižšie odvodzuje triedu OnMethodBoundaryAspect a prepíše metódy OnEntry a OnExit.

 [Serializovateľné]

verejná trieda ExecutionTimeAspect: OnMethodBoundaryAspect

    {

[Neserializované]

Stopky stopky;

verejné prepísanie void OnEntry (MethodExecutionArgs args)

        {

stopWatch = Stopwatch.StartNew ();

base.OnEntry (args);

        }

verejné prepísanie void OnExit (MethodExecutionArgs args)

        {

reťazcová metóda = nová

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

string message = string.Format ("Metóda: [{0}] sa uskutočnila

{1} ms na vykonanie. ",

                        metóda, stopWatch.ElapsedMilliseconds);

Console.WriteLine (správa);

base.OnExit (args);

        }

    }

Môžete tiež vyladiť metódu OnExit vyššie, aby ste zaznamenali čas vykonania metód. Teraz, keď je váš aspekt pripravený na použitie, je možné ho použiť na jednu alebo viac metód na získanie času vykonania.

[ExecutionTimeAspect]

public static void TestExceptionAspect ()

{

// Nejaký kód

}

Viac informácií o službe PostSharp sa dozviete v dokumentácii.