Jede kostenlose Alternative zu PostSharp [geschlossen]

8

Die Anwendung, die wir erstellen, sendet regelmäßig verschiedene Arten von E-Mails. Ich habe die E-Mail-Vorlagen in einem Azure-Blobspeicher gespeichert und die Methoden, die für das Senden von E-Mails zuständig sind, ziehen die entsprechenden E-Mail-Vorlagen von dort. Ich möchte, dass die Vorlagen außerhalb des gehosteten Diensts liegen, falls ich sie aktualisieren möchte. Dazu kann ich einfach neue Vorlagen in den Blob hochladen.

Das Problem, das ich aus Leistungs- und Kostenperspektive habe, ist, dass sich die E-Mail-Vorlagen innerhalb von 24 Stunden kaum ändern. Das Caching der Methode ähnlich wie [OutputCache(Duration = duration, VaryByParam = "id")] in ASP.NET MVC ist daher eine ideale Lösung, um die Leistung der Worker-Rolle zu erhöhen. Wie das geht, ist jetzt ein Problem. Ich habe von PostSharp erfahren, aber unser Budget hat die Lizenzgebühren von PostSharp nicht von Anfang an berücksichtigt!

Weitere kostenlose Alternativen? Danke, dass Sie mir geholfen haben.

    
olatunjee 02.01.2013, 01:24
quelle

6 Antworten

3

PostSharp Starter Edition ist kostenlos und würde Ihre Anforderungen erfüllen.

    
Gael Fraiteur 03.01.2013, 09:15
quelle
1

Ich habe das Caching auf Methodenebene in der Vergangenheit mithilfe der folgenden Kombination implementiert:

  1. Autofac als IoC-Container
  2. Autofacs MVC3-Integrationspaket
  3. Autofacs Integration von DynamicProxy2 (Schloss) zur Unterstützung von Abfangen
  4. Benutzerdefiniertes Attribut zum Gestalten von Klassen, die Caching-Unterstützung benötigen
  5. Benutzerdefinierter Interceptor zum Hinzufügen von Caching auf Methodenebene

Das benutzerdefinierte Attribut und der Interceptor können relativ einfach eingerichtet werden. Das Hauptproblem beim Caching auf Methodenebene ist, wie ich glaube, wie Sie Cachetreffer und Fehltreffer auf optimale, aber dennoch präzise Weise bestimmen.

In meinem Fall musste es generisch sein (jede Art von Methodenaufruf und Parametern unterstützen), also musste ich eine flexible Möglichkeit schaffen, alle Methodenparameterwerte zu hashen, um einen Aufruf von einem anderen zu unterscheiden. Aber in Ihrem Fall könnte dies ein sehr spezifischer Interceptor sein, der die Struktur Ihres Methodenaufrufs bereits kennt, was die Dinge viel einfacher machen würde.

Jetzt zum eigentlichen Caching können Sie die Caching-Unterstützung von .NET nutzen, die im Namespace System.Runtime.Caching verfügbar ist, der bereits ein MemoryCache , wenn das für Sie geeignet ist.

    
Pablo Romeo 02.01.2013 05:04
quelle
1

Ich habe SNAP einige Male verwendet. Es ist kostenlos und sehr einfach einzurichten und mit einer Reihe von IoC-Containern zu verwenden

    
MarkG 02.01.2013 07:23
quelle
0

Haben Sie darüber nachgedacht, lokale Speicherressourcen zu verwenden, um die Vorlagen aus dem Speicher zu entfernen? Sie können ein Intervall in der Methode Ausführen der RoleEntryPoint .

[Aktualisieren]

Ich war vielleicht oben nicht klar gewesen. Die Vorlage sollte im Blob Storage gespeichert werden. Lokaler Speicher würde verwendet, um eine Kopie der Vorlage lokal auf jeder Instanz des Dienstes zwischenzuspeichern. Wenn Sie den ETag in einer separaten Datei speichern, können Sie überprüfen, ob sich die Vorlage vor der Übertragung des Blobs geändert hat, z. B .:

  • welcome.tpl
  • welcome.tag.tpl

Lesen Sie im RoleEntryPoint das Etag aus der Datei * .tag.tpl. Senden Sie Ihre Anfrage gegen Blob-Speicher mit einem bedingten Header , der das Etag weitergibt mit einer Zugriffsbedingung If-None-Match . Wenn das Blob nicht aktualisiert wurde, wird ein HTTP 304 Nicht geändert Response-Code zurückgegeben. Wenn es aktualisiert wurde, wird das Blob heruntergeladen.

[/ Update]

    
cory-fowler 02.01.2013 01:44
quelle
0

Wenn Sie nur AOP-Funktionalität haben wollen, können Sie etwas wie Ninject Interception verwenden.

Ссылка

    
Erik Funkenbusch 03.01.2013 09:19
quelle
0

Sie können versuchen, KingAOP zu verwenden - einfach für solche Aufgaben. Der Hauptunterschied ist:
  1) Erzeugen von Code in der Laufzeit, ohne zusätzliche Kompilierzeit zu verschwenden.
  2) basiert auf "dynamisch" - es bedeutet, dass Ihr Code über offizielle C # -Compiler generiert wird.

Es ist ein Open-Source-Projekt: Ссылка

Werfen Sie einen Blick auf Artikel:
Ссылка

    
Lubch 13.12.2013 12:04
quelle

Tags und Links