dynamisches laden von "klassen"



  • Hallo,
    ist es mit c# möglich klassen dynamisch nachzuladen?
    Ich habe eine funktion, die aus der datenbank einen text lädt und diesen ausgibt. aber in dem text sollen durch spezielle "Tags" funktionen ausgeführt werden können (den text muss ich nat. vorher mittels regexp parsen).
    z.b. "{#zeige_kundenliste#} soll die kundenliste anzeigen.
    diese funktionsliste soll aber erweiterbar sein.
    In dem Projekt davor (classic asp) wurde mittels CASE-block die benötige "Funktion " ermittelst und dann ausgeführt. Da man unter asp aber kein Code dynamisch nachladen konnte, mussten _alle_ möglichen funktionen inkludiert werden.

    Ich suche nun eine möglichkeit dies unter c# zu realisieren, aber ohne alle funktionen zur laufzeit zu inkludieren.
    Dies könnte ich mittels Page.LoadControl machen. Lieder ist diese klasse aber schon zu aufgebläht (glaube System.Web.Controls.UserControl / ascx und ascx.cs-dateien nötig).
    D.h. ich möchte z.b. nur eine .cs datei nachladen, da die klassen kein eigenes Web-Control darstellen sollen sondern nur einen einfachen string zurückgeben sollen.

    Ist dies überhaupt möglich?



  • Warum benutzt du nicht WebServices? Die sind für solche Fälle die bessere Alternative.



  • hm, webservices wären nicht so toll, weil die "module" mit dem framework daten austauschen müssen (in beide richtungen). z.b. db-connection, sessions etc.

    werds wohl doch über usercontrols realisieren



  • Klar, ist möglich. Schau Dir mal 'Activator.CreateInstance' an. Die Assembly kann man mit 'System.Reflection.Assembly.Load[File/From]' laden.



  • cool. genau nach was ichz gesucht habe.
    hab zwar gegoogelt aber nicht nach den richtigen stichworten

    danke dir



  • Ich glaube du machst dir sorgen um ein Problem das gar keins ist.

    Im klassischen ASP musste ja wie du sagst includiert werden, da jede Seite für sich existierte und bei jedem Zugriff geparst wurde. Da ist klar das man möglichst wenig Code in einer Seite haben möchte.

    In ASP.NET ists ja aber anders, da wird die Seite kompiliert und die wird dann ausgeführt und das Ergebnis zum Browser gesendet. Da kannst du ganz normal DLLs verwenden wie in klassischen Anwendungen und egal wie viel externen Code du benutzt, deine eigentliche Seite wird weder langsamer durch externen Code, noch größer. Die DLLs jetzt umständlich über CreateInstance zu laden ist quatsch, der Aufruf düfte wegen dem internen Reflection Zeugs sogar um einiges langsamer sein.


Anmelden zum Antworten