2008-10-09 5 views
44

Ich sah gerade Ayende's post heute über PostSharp. Ich habe den Code heruntergeladen und es ausprobiert, und ich dachte, es wäre die coolste und einfachste Art, mit AOP umzugehen, die ich gesehen habe.Was ist IL Weben?

In seinem Beitrag sagt Ayende, dass PostSharp seine Magie über IL Weaving erreicht. Nun, auf einer abstrakten Ebene kann ich ableiten, was das bedeutet, aber ich wollte sehen, ob es dort eine detailliertere Antwort gibt. Zum ersten Mal seit langer Zeit war Google für mich leer. Und so dachte ich, das wäre eine gute Frage für StackOverflow (da ich seit ein paar Jahren Jeffs Blog abonniert habe und wusste, dass diese Seite ihr Ding macht).

Was genau ist IL Weaving und wie wird es erreicht?

Antwort

7

IL Weben ist ähnlich wie ByteCode Weben. .Net kompiliert zu einer Zwischensprache, die von der .NET-Clr ausgeführt wird. IL Weaving analysiert und verändert die Zwischensprache grundlegend. Da es auf dieser Ebene gemacht wird, kann es für alle .NET-Sprachen durchgeführt werden.

4

Könnte helfen, wenn Sie Google MSIL Injection stattdessen. Dieser Link ist von PostSharp und es erklärt es gut.

Meine Firma hat kürzlich ein Produkt namens dynaTrace zur Leistungsdiagnose gekauft. Es verwendet MSIL-Injektion, um Methoden zu instrumentieren. Im Grunde fügt es IL-Code vor Ihrer Methode und nach der Zeit die Methode hinzu (ich bin sicher, dass es viel mehr als das gibt).

Und here ist eine ziemlich einbezogene, aber gute Erklärung des Prozesses.

+0

Ihr zweiter Link ('hier') ist nicht mehr verfügbar, vermutlich seit das entsprechende Problem archiviert wurde. Erinnern Sie sich zufällig an das Jahr/den Monat des Problems, auf das Sie sich bezogen haben? Danke im Voraus. – Thomas

+0

Der Link ist wieder verfügbar. Ich habe ein paar Infos zum Öffnen hinzugefügt. – Nebula

20

Weben bezieht sich auf das Einfügen von Funktionalität in ein vorhandenes Programm. Dies kann vom Konzept her auf mehreren Ebenen erfolgen:

  • Quellcode Weben Quellcodezeilen injizieren würde, bevor der Code kompiliert wird
  • IL Weben (für .NET) fügt den Code als IL Anweisungen in der Montage
  • ByteCode (für Java) arbeitet an der Klassendatei weben, sehen diese Kommentare wRT AspectJ

theoretisch Sie eine tiefere und weben mit einer ausführbaren Datei zu nativen Befehle kompiliert gehen könnte, aber dies viel Komplexität würde und mir sind keine bekannt was das tut.

+8

Native Instruktionen "Weben" sind in nativen ausführbaren Debuggern üblich. Zum Beispiel erfordert das Setzen eines Haltepunkts im Code auf dem Intel x86-Befehlssatz das Einfügen eines INT 3-Opcodes in den Zielcode. Dies überschreibt die native Anweisung, so dass Sie auch das Byte, das dort war, speichern und es nach dem Erreichen des Haltepunkts zurückstellen müssen, damit das Programm normal ausgeführt wird. Ja, es ist kompliziert, weshalb das Schreiben von Debuggern eine seltene Kunst ist. – dthorpe

+2

Einige Links, die ich zu diesem Thema gesammelt habe: Quellcode Weben http://www.tara.tcd.ie/handle/2262/1239; IL Weben http://www.gutgames.com/post/Creating-an-AOP-Library-in-Net-Part-1.aspx; ByteCode weben http://www.eclipse.org/aspectj/doc/released/devguide/bytecode-concepts.html; Aspect # http://www.developerfusion.com/article/5307/aspect-oriented-programming-using-net/2/ –

+0

Beachten Sie, dass in dem Kommentar, Jeroen verließ, der Beitrag von gutgames.com spricht tatsächlich über die Implementierung von AOP mit Subclassing, nicht IL Weben. – JaCraig