Programavimas

Kaip programuoti naudojant „PostSharp“ C #

Į aspektą orientuotas programavimas (AOP) yra programavimo paradigma, leidžianti apibrėžti politiką, kad sklandžiai valdytumėte kompleksinius programų klausimus. AOP gali būti naudojamas pašalinant susimaišiusį kodą, užrašant švaresnį kodą, padidinant kodo abstrakciją ir moduliškumą, sumažinant priežiūros ir kūrimo išlaidas bei padarant programas patogesnes ir lankstesnes. „PostSharp“ yra vienas populiariausių prieinamų įrankių, kurį galima naudoti įgyvendinant AOP programose.

Darbo pradžia

Norėdami pradėti naudoti „PostSharp“, galbūt norėsite įdiegti naujausią stabilų leidimą naudodami „Package Manager Console“. Arba galite įdiegti „PostSharp“ naudodami langą „Tvarkyti„ NuGet “paketus“. Norėdami pradėti naudoti „PostSharp“ savo programoje, atlikite šiuos veiksmus.

1. Atidarykite „Visual Studio 2015“.

2. Meniu „Visual Studio“ spustelėkite Failas> Naujas> Projektas.

3. Pasirinkite „Console Application“ šabloną iš rodomų projekto šablonų sąrašo.

4. Išsaugokite naują konsolės programos projektą pavadinimu.

5. Meniu „Visual Studio“ spustelėkite Įrankiai> „NuGet“ paketų tvarkyklė> Tvarkyti „NuGet“ paketus sprendimui.

6. Ieškokite naujausio stabilaus „PostSharp“ leidimo ir spustelėkite „Install“.

Ir tai yra viskas, ką jums reikia padaryti kol kas. Paraginti pasirinkite projektą (-us), kuriame norite įdiegti „PostSharp“, ir spustelėkite Gerai. Baigę diegti, būsite pasirengę naudoti „PostSharp“ savo programoje.

„PostSharp“ programavimas

Įdiegę „PostSharp“, galite pradėti naudoti jį savo programoje. Norėdami tai padaryti, turite sukurti vieną ar kelis programos taikymo aspektus. Vienas iš būdų įdiegti AOP savo programose yra atributų naudojimas. Kai jūsų aspektas bus apibrėžtas, norėsite pritaikyti aspektą savo programoje naudodami atributus.

„Sprendimų naršyklės“ lange pasirinkite savo projektą, dešiniuoju pelės mygtuku spustelėkite ir pridėkite naują klasę pavadinimu „ExceptionAspect“. Atminkite, kad aspektas, reikalingas tvarkant išimtis jūsų programoje, turėtų kilti iš „PostSharp“ bibliotekos OnExceptionAspect klasės. „OnExceptionAspect“ apima metodą, vadinamą „OnException“, kurį turėsite nepaisyti, kad tvarkytumėte išimtis. Šis kodas parodo mūsų pasirinktinių išimčių aspektų klasę.

[Serializuojama]

viešoji klasė „ExceptionAspect“: „OnExceptionAspect“

    {

public override void OnException (Argumentai „MethodExecutionArgs“)

        {

Console.WriteLine ("Klaida įvyko:" +

DateTime.Now.ToShortTimeString () + "Klaidos pranešimas:" +

argumentai. Išimtis. Žinutė);

args.FlowBehavior = FlowBehavior.Tęsti;

bazė.OnException (argumentai);

        }

    }

Kiekvienas aspektas turėtų būti serijinis - atkreipkite dėmesį į atributo [Serializable] naudojimą aukščiau pateiktoje „ExceptionAspect“ klasėje. Dabar, kai aspektas yra, galite naudoti jį viename ar keliuose savo programos metoduose naudodami atributus. Šis kodo fragmentas iliustruoja pavyzdį, kaip pritaikyti ką tik sukurtą išimties aspektą.

[ExceptionAspect]

public static void „TestExceptionAspect“ ()

  {

mesti naują išimtį („Tai yra bandomasis pranešimas“);

  }

Ką tik sukurtą pasirinktinių išimčių aspektą galite pritaikyti vienam ar keliems programos metodams - ar net klasės lygiui. Jei aspektas taikomas klasės lygmeniu, būtų tvarkomos išimtys, kurias išmeta bet kuris klasės metodas. „PostSharp“ aspektai taip pat gali būti taikomi visame surinkime. Ši funkcija yra žinoma kaip „Multicast“ ir ją galima pritaikyti tikslinei vardų sričiai faile AssemblyInfo.cs nurodant šį teiginį:

[surinkimas: ExceptionAspect (AtributasTargetTypes = "PostSharp. *")]

„PostSharp. *“ Pirmiau pateiktame kodo fragmente nurodo visus tipus, esančius „PostSharp“ vardų srityje.

„OnMethodBoundaryAspect“ klasė leidžia vykdyti pasirinktinį kodą prieš ir po metodo vykdymo. Nors jo „OnEntry“ metodas vykdomas prieš vykdant metodą, kuriam taikomas aspektas, „OnExit“ metodas vykdomas atlikus jūsų metodą. Šis kodų sąrašas parodo, kaip galite išmatuoti metodo vykdymo laiką naudojant aspektą. Žemiau esanti „ExecutionTimeAspect“ klasė išveda „OnMethodBoundaryAspect“ klasę ir nepaiso „OnEntry“ bei „OnExit“ metodų.

 [Serializuojama]

viešoji klasė ExecutionTimeAspect: OnMethodBoundaryAspect

    {

[Neserializuotas]

Chronometras stopwatch;

public override void OnEntry (Argumentai „MethodExecutionArgs“)

        {

stopWatch = Chronometras.StartNew ();

bazė.OnEntry (argumentai);

        }

public override void OnExit (Argumentai „MethodExecutionArgs“)

        {

eilutės metodas = naujas

„StackTrace“ (). „GetFrame“ (1). „GetMethod“ (). Pavadinimas;

string message = string.Format ("Metodas: [{0}] užtruko

{1} ms vykdyti. ",

                        metodas, stopWatch.ElapsedMilliseconds);

Console.WriteLine (pranešimas);

bazė.OnExit (argumentai);

        }

    }

Taip pat galite pakoreguoti anksčiau pateiktą „OnExit“ metodą, kad užregistruotumėte metodų vykdymo laiką. Dabar, kai jūsų aspektas yra paruoštas naudoti, jį galima pritaikyti vienam ar keliems metodams, norint gauti vykdymo laiką.

[ExecutionTimeAspect]

public static void „TestExceptionAspect“ ()

{

// Kažkas kodas

}

Daugiau apie „PostSharp“ galite sužinoti perskaitę dokumentaciją.

$config[zx-auto] not found$config[zx-overlay] not found