Programmering

Hvordan programmere ved hjelp av PostSharp i C #

Aspect Oriented Programming (AOP) er et programmeringsparadigme som lar deg definere retningslinjer for å sømløst håndtere de tverrgående bekymringene i applikasjoner. AOP kan brukes for å fjerne sammenblandet kode, skrive renere kode, øke kodeabstraksjon og modularitet, redusere vedlikeholds- og utviklingskostnader, og gjøre applikasjoner mer håndterbare og fleksible. PostSharp er et av de mest populære verktøyene som er tilgjengelige som kan brukes til å implementere AOP i applikasjoner.

Starter

For å begynne å bruke PostSharp, vil du kanskje installere den siste stabile utgivelsen ved hjelp av Package Manager-konsollen. Alternativt kan du installere PostSharp ved å bruke vinduet "Manage NuGet Packages". For å komme i gang med PostSharp i applikasjonen din, følg disse trinnene.

1. Åpne Visual Studio 2015.

2. I Visual Studio-menyen klikker du på Fil> Ny> Prosjekt.

3. Velg konsollapplikasjonsmalen fra listen over prosjektmalene som vises.

4. Lagre det nye konsollapplikasjonsprosjektet med et navn.

5. I Visual Studio-menyen klikker du på Verktøy> NuGet Package Manager> Manage NuGet Packages for Solution.

6. Søk etter den siste stabile utgivelsen av PostSharp, og klikk på Installer.

Og det er alt du trenger å gjøre for nå. Når du blir bedt om det, velger du prosjektet (e) du vil at PostSharp skal installeres i, og klikker OK. Når installasjonen er fullført, er du klar til å bruke PostSharp i applikasjonen din.

Programmering av PostSharp

Når PostSharp er installert, kan du komme i gang med å bruke det i applikasjonen din. For å gjøre dette må du opprette en eller flere aspekter som applikasjonen din kan bruke. En måte å implementere AOP i applikasjonene dine på er ved bruk av attributter. Når aspektet ditt er definert, vil du bruke aspektet på programmet ditt gjennom attributter.

I vinduet Solution Explorer velger du prosjektet ditt, høyreklikker og legger til en ny klasse som heter ExceptionAspect. Vær oppmerksom på at det aspektet som trengs for å håndtere unntak i applikasjonen, skal stamme fra OnExceptionAspect-klassen i PostSharp-biblioteket. OnExceptionAspect inkluderer en metode kalt OnException som du må overstyre for å håndtere unntak. Den følgende koden illustrerer vår tilpassede unntaksklasse.

[Serialiserbar]

offentlig klasse ExceptionAspect: OnExceptionAspect

    {

offentlig overstyring ugyldig OnException (MethodExecutionArgs args)

        {

Console.WriteLine ("Feil oppstod ved:" +

DateTime.Now.ToShortTimeString () + "Feilmelding:" +

args.Exception.Message);

args.FlowBehavior = FlowBehavior.Continue;

base.OnException (args);

        }

    }

Hvert aspekt skal kunne serienummereres - legg merke til bruken av [Serializable] -attributtet i ExceptionAspect-klassen vist ovenfor. Nå som aspektet er på plass, kan du bruke det på en eller flere metoder i applikasjonen din ved hjelp av attributter. Følgende kodebit illustrerer en eksempelmetode for å bruke unntaksaspektet som nettopp er opprettet.

[ExceptionAspect]

offentlig statisk ugyldighet TestExceptionAspect ()

  {

kaste nytt unntak ("Dette er en testmelding");

  }

Du kan bruke det tilpassede unntaksaspektet som nettopp er opprettet på en eller flere metoder i applikasjonen - eller til og med på klassenivå. Hvis aspektet blir brukt på klassenivå, vil unntak fra noen av metodene i klassen bli håndtert. PostSharp-aspekter kan også brukes gjennom hele forsamlingen. Denne funksjonen er kjent som Multicast, og den kan brukes på målnavnområdet ved å spesifisere følgende uttalelse i AssemblyInfo.cs-filen:

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

"PostSharp. *" I kodebiten ovenfor refererer til alle typene som finnes i PostSharp-navneområdet.

OnMethodBoundaryAspect-klassen lar deg utføre tilpasset kode før og etter kjøring av en metode. Mens OnEntry-metoden kjøres før kjøring av en metode som aspektet brukes på, kjøres OnExit-metoden etter kjøring av metoden din. Følgende kodeliste illustrerer hvordan du kan måle kjøringstiden for en metode ved hjelp av et aspekt. ExecutionTimeAspect-klassen nedenfor henter OnMethodBoundaryAspect-klassen og overstyrer OnEntry- og OnExit-metodene.

 [Serialiserbar]

offentlig klasse ExecutionTimeAspect: OnMethodBoundaryAspect

    {

[Ikke seriell]

Stoppeklokke stoppeklokke;

offentlig overstyring ugyldig OnEntry (MethodExecutionArgs args)

        {

stopWatch = Stoppeklokke.StartNew ();

base.OnEntry (args);

        }

offentlig overstyring ugyldig OnExit (MethodExecutionArgs argumenter)

        {

strengmetode = ny

StackTrace (). GetFrame (1) .GetMethod (). Navn;

string message = string.Format ("Metoden: [{0}] tok

{1} ms å utføre. ",

                        metode, stopWatch.ElapsedMilliseconds);

Console.WriteLine (melding);

base.OnExit (args);

        }

    }

Du kan også tilpasse OnExit-metoden ovenfor for å logge utføringstiden for metoder. Nå som aspektet ditt er klart til bruk, kan det brukes på en eller flere metoder for å hente utføringstiden.

[ExecutionTimeAspect]

offentlig statisk ugyldighet TestExceptionAspect ()

{

// Noe kode

}

Du kan lære mer om PostSharp ved å lese dokumentasjonen.

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