2017-02-25 2 views
0

Ich versuche, einfache AOP-Ansatz mit MVC-Projekt. Installierte Postharp Express Edition und Pakete. Ich habe 2 Projekt, zuerst ist Aspektmodul und Sekunde ist lässiges mvc Projekt.AOP Postsharp - Aspect Attribute funktioniert nicht

Also habe ich eine benutzerdefinierte Protokollattribut mit Aspekt,

[Serializable] 
public class LogAttribute : OnMethodBoundaryAspect 
    { 
     public LogAttribute() 
     { 
     } 
     public override void OnEntry(MethodExecutionArgs args) 
     {     
      Log.Instance.Info(args.Arguments[0]); 

      base.OnEntry(args); 
     } 

     public override void OnExit(MethodExecutionArgs args) 
     { 
      Log.Instance.Info(args.Arguments[0]); 
      base.OnExit(args); 
     } 

     public override void OnException(MethodExecutionArgs args) 
     { 
      Log.Instance.Error(args.Exception,args.Method.Name); 
      base.OnException(args); 
     } 
    } 

und das ist mein Homecontroller

[Log] 
    public class HomeController : Controller 
    { 

     public HomeController() 
     { 
     } 

     public ActionResult Index() 
     { 
      Debug.WriteLine("start");    
      return View(); 
     } 
} 

Postsharp Dokumente ziemlich klar, aber mein Attribut traf nie ein Verfahren zur Verfügung gestellt Postsharp. Ich habe versucht, verschiedene Attribute zu verwenden und andere Dinge, aber immer noch passiert nichts. Ich habe auch versucht, IL-Code meines Controllers mit und ohne Log-Attribut zu überprüfen. Tatsächlich scheint es, dass kein zusätzlicher Code vom Attribut mit Postsharp kommt. P.S. : Ja, ich habe versucht, sauber und wieder aufzubauen (wie Millionen mal).

+0

Bevor Sie beginnen, Ihre benutzerdefinierten Filter in ASP.NET MVC zu verwenden, sollten Sie sie in der FilterConfig-Klasse registrieren. Dieser Artikel [Filtert in MVC] (http://www.tutorialstreacher.com/mvc/filters-in-asp. net-mvc) beschreibt, wie Sie Ihren benutzerdefinierten Filter in ASP.NET MVC erstellen, registrieren und verwenden. –

+0

es ist kein Standard-Attribut-Klasse thou, BTW zuerst, was ich versuchte, aber immer noch gleich. postsharp muss vor den Aktionen inject byte code attribute onentry sein. Ich überprüfe meinen Byte Code nichts ändere nach dem Hinzufügen –

+0

Bitte überprüfen Sie zuerst, ob PostSharp während der Build-Zeit läuft. Im Build-Protokoll sollte eine Nachricht von PostSharp erscheinen. Wurde das PostSharp NuGet-Paket erfolgreich in Ihrem Projekt installiert? In der * .csproj-Datei sollte eine Import-Zeile stehen, die auf PostSharp.targets verweist. – AlexD

Antwort

0

Ich fand es heraus nach hartem Versuch. Wenn wir Postsharp für unser Projekt verwenden wollen, müssen wir die Postsharp VS Extension hinzufügen. Nach der Installation der Postsharp-Erweiterung müssen wir uns anmelden und unsere Postsharp-Richtlinie überprüfen, um unsere Klassen mit Postsharp-Attributen (oder benutzerdefinierten abgeleiteten Postsharp-Attributen) auszurichten. Postsharp bietet 10 Zielklassen für die Express Edition. Nach dem Kompilieren für die Ausgabe für Postsharp-Prozess auschecken, wenn es gelingt, postsharp IL-Code in unsere Methode injizieren, die wir mit Aspekt-Attribute markiert. Wenn wir alles richtig gemacht haben, können wir Sitzungen, Benutzer usw. bekommen, alles kann geloggt werden, ohne eine Workaround zu haben, und es gibt einen einfachen Cache-Mechanismus.

Es geht nur um Postsharp VS Extension & Richtlinieneinstellungen.

Verwandte Themen