So programmieren Sie mit PostSharp in C #

Aspect Oriented Programming (AOP) ist ein Programmierparadigma, mit dem Sie Richtlinien definieren können, um die Querschnittsthemen in Anwendungen nahtlos zu verwalten. AOP kann genutzt werden, um vermischten Code zu entfernen, saubereren Code zu schreiben, die Code-Abstraktion und -Modularität zu erhöhen, die Wartungs- und Entwicklungskosten zu senken und Anwendungen verwaltbarer und flexibler zu machen. PostSharp ist eines der beliebtesten verfügbaren Tools, mit denen AOP in Anwendungen implementiert werden kann.

Anfangen

Um PostSharp zu verwenden, möchten Sie möglicherweise die neueste stabile Version über die Package Manager-Konsole installieren. Alternativ können Sie PostSharp über das Fenster "NuGet-Pakete verwalten" installieren. Führen Sie die folgenden Schritte aus, um mit der Verwendung von PostSharp in Ihrer Anwendung zu beginnen.

1. Öffnen Sie Visual Studio 2015.

2. Klicken Sie im Visual Studio-Menü auf Datei> Neu> Projekt.

3. Wählen Sie die Konsolenanwendungsvorlage aus der Liste der angezeigten Projektvorlagen aus.

4. Speichern Sie das neue Konsolenanwendungsprojekt unter einem Namen.

5. Klicken Sie im Visual Studio-Menü auf Extras> NuGet Package Manager> NuGet Packages for Solution verwalten.

6. Suchen Sie nach der neuesten stabilen Version von PostSharp und klicken Sie auf Installieren.

Und das ist alles, was Sie jetzt tun müssen. Wenn Sie dazu aufgefordert werden, wählen Sie die Projekte aus, in denen PostSharp installiert werden soll, und klicken Sie auf OK. Nach Abschluss der Installation können Sie PostSharp in Ihrer Anwendung verwenden.

Programmieren von PostSharp

Sobald PostSharp installiert ist, können Sie es in Ihrer Anwendung verwenden. Dazu müssen Sie einen oder mehrere Aspekte für Ihre Anwendung erstellen. Eine Möglichkeit, AOP in Ihren Anwendungen zu implementieren, ist die Verwendung von Attributen. Sobald Ihr Aspekt definiert wurde, möchten Sie den Aspekt über Attribute auf Ihr Programm anwenden.

Wählen Sie im Projektmappen-Explorer Ihr Projekt aus, klicken Sie mit der rechten Maustaste und fügen Sie eine neue Klasse mit dem Namen ExceptionAspect hinzu. Beachten Sie, dass der Aspekt, der zum Behandeln von Ausnahmen in Ihrer Anwendung erforderlich ist, von der OnExceptionAspect-Klasse der PostSharp-Bibliothek abgeleitet werden sollte. OnExceptionAspect enthält eine Methode namens OnException, die Sie überschreiben müssen, um Ausnahmen zu behandeln. Der folgende Code veranschaulicht unsere benutzerdefinierte Ausnahmeaspektklasse.

[Serializable]

    public class ExceptionAspect : OnExceptionAspect

    {

        public override void OnException(MethodExecutionArgs args)

        {

            Console.WriteLine("Error occured at: "+

            DateTime.Now.ToShortTimeString() + " Error Message: "+

            args.Exception.Message);

            args.FlowBehavior = FlowBehavior.Continue;

            base.OnException(args);

        }

    }

Jeder Aspekt sollte serialisierbar sein - beachten Sie die Verwendung des Attributs [Serializable] in der oben gezeigten ExceptionAspect-Klasse. Nachdem der Aspekt vorhanden ist, können Sie ihn mithilfe von Attributen auf eine oder mehrere Methoden in Ihrer Anwendung anwenden. Das folgende Codeausschnitt zeigt eine Beispielmethode zum Anwenden des gerade erstellten Ausnahmeaspekts.

[ExceptionAspect]

 public static void TestExceptionAspect()

  {

      throw new Exception("This is a test message");

  }

Sie können den soeben erstellten benutzerdefinierten Ausnahmeaspekt auf eine oder mehrere Methoden in der Anwendung anwenden - oder sogar auf Klassenebene. Wenn der Aspekt auf Klassenebene angewendet wird, werden Ausnahmen behandelt, die von einer der Methoden der Klasse ausgelöst werden. PostSharp-Aspekte können auch auf die gesamte Baugruppe angewendet werden. Diese Funktion wird als Multicast bezeichnet und kann auf den Zielnamespace angewendet werden, indem die folgende Anweisung in der Datei AssemblyInfo.cs angegeben wird:

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

"PostSharp. *" Im obigen Codeausschnitt bezieht sich auf alle Typen, die im PostSharp-Namespace vorhanden sind.

Mit der OnMethodBoundaryAspect-Klasse können Sie benutzerdefinierten Code vor und nach der Ausführung einer Methode ausführen. Während die OnEntry-Methode vor der Ausführung einer Methode ausgeführt wird, auf die der Aspekt angewendet wird, wird die OnExit-Methode nach der Ausführung Ihrer Methode ausgeführt. Die folgende Codeliste zeigt, wie Sie die Ausführungszeit einer Methode anhand eines Aspekts messen können. Die folgende ExecutionTimeAspect-Klasse leitet die OnMethodBoundaryAspect-Klasse ab und überschreibt die OnEntry- und OnExit-Methoden.

 [Serializable]

    public class ExecutionTimeAspect : OnMethodBoundaryAspect

    {

        [NonSerialized]

        Stopwatch stopWatch;

        public override void OnEntry(MethodExecutionArgs args)

        {

            stopWatch = Stopwatch.StartNew();

            base.OnEntry(args);

        }

        public override void OnExit(MethodExecutionArgs args)

        {

            string method = new

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

            string message = string.Format("The method: [{0}] took

            {1}ms to execute.",

                        method, stopWatch.ElapsedMilliseconds);

            Console.WriteLine(message);

            base.OnExit(args);

        }

    }

Sie können auch die oben beschriebene OnExit-Methode optimieren, um die Ausführungszeit von Methoden zu protokollieren. Nachdem Ihr Aspekt nun verwendet werden kann, kann er auf eine oder mehrere Methoden angewendet werden, um die Ausführungszeit abzurufen.

[ExecutionTimeAspect]

public static void TestExceptionAspect()

{

   //Some code

}

Weitere Informationen zu PostSharp finden Sie in der Dokumentation.