Programmering

Sådan programmeres du ved hjælp af PostSharp i C #

Aspect Oriented Programming (AOP) er et programmeringsparadigme, der giver dig mulighed for at definere politikker til problemfrit at styre de tværgående bekymringer i applikationer. AOP kan udnyttes til at fjerne blandet kode, skrive renere kode, øge kodeabstraktion og modularitet, reducere vedligeholdelses- og udviklingsomkostninger og gøre applikationer mere håndterbare og fleksible. PostSharp er et af de mest populære værktøjer til rådighed, der kan bruges til at implementere AOP i applikationer.

Kom godt i gang

For at begynde at bruge PostSharp, kan du installere den seneste stabile udgivelse ved hjælp af Package Manager-konsollen. Alternativt kan du installere PostSharp ved hjælp af vinduet "Manage NuGet Packages". For at komme i gang med at bruge PostSharp i din applikation skal du følge disse trin.

1. Åbn Visual Studio 2015.

2. I Visual Studio-menuen skal du klikke på Filer> Ny> Projekt.

3. Vælg konsolapplikationsskabelonen fra listen over projektskabeloner, der vises.

4. Gem det nye konsolapplikationsprojekt med et navn.

5. I Visual Studio-menuen skal du klikke på Værktøjer> NuGet Package Manager> Manage NuGet Packages for Solution.

6. Søg efter den seneste stabile udgivelse af PostSharp, og klik på Installer.

Og det er alt hvad du skal gøre for nu. Når du bliver bedt om det, skal du vælge det eller de projekter, som PostSharp skal installeres i, og klikke på OK. Når installationen er afsluttet, er du klar til at bruge PostSharp i din applikation.

Programmering af PostSharp

Når PostSharp er installeret, kan du komme i gang med at bruge det i din applikation. For at gøre dette skal du oprette et eller flere aspekter, som din applikation kan bruges til. En måde at implementere AOP i dine applikationer på er ved hjælp af attributter. Når dit aspekt er blevet defineret, skal du anvende aspektet på dit program gennem attributter.

I vinduet Solution Explorer skal du vælge dit projekt, højreklikke og tilføje en ny klasse med navnet ExceptionAspect. Bemærk, at det aspekt, der er nødvendigt for at håndtere undtagelser i din applikation, skal stamme fra OnExceptionAspect-klassen i PostSharp-biblioteket. OnExceptionAspect inkluderer en metode kaldet OnException, som du bliver nødt til at tilsidesætte for at håndtere undtagelser. Den følgende kode illustrerer vores brugerdefinerede aspektklasse for undtagelser.

[Serialiserbar]

offentlig klasse ExceptionAspect: OnExceptionAspect

    {

offentlig tilsidesættelse ugyldigt OnException (MethodExecutionArgs args)

        {

Console.WriteLine ("Der opstod en fejl ved:" +

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

args.Exception.Message);

args.FlowBehavior = FlowBehavior.Continue;

base.OnException (args);

        }

    }

Hvert aspekt skal serieres - bemærk brugen af ​​[Serializable] -attributten i ExceptionAspect-klassen vist ovenfor. Nu hvor aspektet er på plads, kan du anvende det på en eller flere metoder i din applikation ved hjælp af attributter. Følgende kodestykke illustrerer en prøvemetode til anvendelse af det netop oprettede undtagelsesaspekt.

[ExceptionAspect]

offentlig statisk ugyldig TestExceptionAspect ()

  {

smid ny undtagelse ("Dette er en testmeddelelse");

  }

Du kan anvende det brugerdefinerede undtagelsesaspekt, der netop er oprettet, på en eller flere metoder i applikationen - eller endda på klasseniveau. Hvis aspektet anvendes på klasseniveau, håndteres undtagelser fra en af ​​metoderne i klassen. PostSharp-aspekter kan også anvendes i hele forsamlingen. Denne funktion er kendt som Multicast, og den kan anvendes på målnavneområdet ved at angive følgende udsagn i AssemblyInfo.cs-filen:

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

"PostSharp. *" I ovenstående kodestykke henviser til alle de typer, der findes i PostSharp-navneområdet.

OnMethodBoundaryAspect-klassen giver dig mulighed for at udføre brugerdefineret kode før og efter udførelse af en metode. Mens dens OnEntry-metode udføres før udførelse af en metode, hvor aspektet anvendes, udføres OnExit-metoden efter udførelse af din metode. Følgende kodeliste illustrerer, hvordan du kan måle udførelsestiden for en metode ved hjælp af et aspekt. Klassen ExecutionTimeAspect nedenfor stammer klassen OnMethodBoundaryAspect og tilsidesætter metoderne OnEntry og OnExit.

 [Serialiserbar]

offentlig klasse ExecutionTimeAspect: OnMethodBoundaryAspect

    {

[Ikke-serielt]

Stopur stopur;

offentlig tilsidesættelse ugyldig OnEntry (MethodExecutionArgs args)

        {

stopWatch = Stopur.StartNew ();

base.OnEntry (args);

        }

offentlig tilsidesættelse ugyldig OnExit (MethodExecutionArgs args)

        {

streng metode = ny

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

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

{1} ms at udføre. ",

                        metode, stopWatch.ElapsedMilliseconds);

Console.WriteLine (besked);

base.OnExit (args);

        }

    }

Du kan også tilpasse OnExit-metoden ovenfor for at logge udførelsestiden for metoder. Nu hvor dit aspekt er klar til brug, kan det anvendes på en eller flere metoder til at hente udførelsestiden.

[ExecutionTimeAspect]

offentlig statisk ugyldig TestExceptionAspect ()

{

// Noget kode

}

Du kan lære mere om PostSharp ved at læse dokumentationen.

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