2009-03-17 13 views
1

Als Perl-Programmierer kann ich Strings als Code auswerten Wenn ich wollte, Kann ich das auch in C# machen (mit Strings oder einem anderen Objekt mit Benutzereingaben)?Wie schreibe ich vom Benutzer erweiterbaren Code?

Was ich erreichen möchte ist, ein Objekt zu erstellen, wo seine Methoden in meinem Quellcode vordefiniert sein können oder zur Laufzeit vom Benutzer definiert werden können, indem Sie eine Zeichenfolge eingeben, die C# -Code für eine Methode oder eine SQL-Abfrage darstellt . Der Methodenaufruf sollte immer seinen Skalarwert als Zeichenfolge zurückgeben. Ich glaube, dass es wünschenswert wäre, einige vordefinierte "System" -Variablen zur Verwendung im Methodenaufruf und einige "Bereinigungs" -Codes zur Verfügung zu stellen, um zu bestätigen, dass eine Zeichenkette tatsächlich zurückgegeben wird .

Psuedo - Struktur

Object Statistic 
     string Name; 
     functionref Method; 

Die Architektur ich im Sinn haben, diese in Echtzeit im Grunde sammeln würde, und fügen Sie sie auf Wunsch des Benutzers auf der Liste der Statistiken, dass Benutzer anzeigen möchte. Definierte Statistiken können in einer Datei gespeichert und während der Initialisierung in das Hauptprogramm geladen werden. Auf diese Weise muss der Benutzer nicht ständig die gewünschte Statistik neu definieren. Bearbeiten/Aktualisieren/Löschen von Statistiken sind erforderlich.

Wenn dies erfolgreich ist, muss ich (der Programmierer) nicht jedes Mal neue Codes hinzufügen, wenn jemand entscheidet, dass er eine neue Information auf seiner Stat-Tafel hat, die ich noch nicht geschrieben habe Code für.

Irgendwelche Ideen, wo Sie anfangen zu lesen, um dies in C# zu erreichen?

Der Zweck dieser Funktion ist ein Programm, das Statistiken für ein laufendes System/eine Datenbank anzeigt. Die zu überwachenden Werte sind zur Entwurfszeit nicht unbedingt bekannt, und auch nicht, wie der gewünschte Wert für den Abruf definiert wird. Ich möchte dem Benutzer die Möglichkeit geben, Statistiken zu definieren, die über den I-Code für das System hinausgehen.

Antwort

1

Auschecken this earlier question.

Bedenken Sie jedoch auch die Stabilität, Skalierbarkeit und Sicherheit Ihrer Lösung. Wenn Sie eine willkürliche Ausführung erlauben, wird Ihre Anwendung nicht so einfach zu bedienen und zu unterstützen sein. Richten Sie eine sehr gut begrenzte Sandbox für extern bereitgestellten Code ein.

Erwarten Sie auch keine normalen Benutzer (wer auch immer sie sind) in der Lage Coder zu sein.

Sie möchten eine eingeschränkte, aber besser handhabbare Erweiterbarkeit z. dependency injection stattdessen.

1

Ich werde Echo, was Pontus gesagt hat, insbesondere in Bezug auf Stabilität, Support-Kosten und erwarten, dass Benutzer Code schreiben. Ich werde auch die Leistung zur Liste hinzufügen, da diese Benutzer wahrscheinlich keine Auswirkungen auf die Leistung ihres Codes haben. Aus diesen und anderen Gründen werden benutzerorientierte eval-ähnliche Konstrukte in C#, nicht als weise angesehen und sollten wahrscheinlich auch nicht in Perl enthalten sein,.

Schauen Sie sich stattdessen den Namespace System.AddIn in .Net an, um die Plug-in-Funktionalität für Ihre Anwendung bereitzustellen.

Verwandte Themen