Laden...

Module im laufenden Betrieb laden

Erstellt von XXL vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.081 Views
X
XXL Themenstarter:in
95 Beiträge seit 2006
vor 14 Jahren
Module im laufenden Betrieb laden

Hallo liebe Leute.

Ich versuche etwas zu programmieren und bin noch nicht auf den richtigen Trichter gekommen. Daher bitte ich euch, mir mal ein paar Stichworte an den Kopf zu schmeissen, nach denen ich suchen muss, um mein Problem zu lösen..

also 😃

ich habe eine GUI mit bestimmter Funktionalität.
In der GUI ist ein Menü mit bestimmten Modulen und deren Funktionen erhalten.
Ich möchte, dass ich DLLs in einen Ordner kopieren kann und wenn ich die Anwendung neu starte, ich die Funktionen dieser DLL nutzen kann. Ich möchte also nicht die Hauptapp neu kompilieren, sondern die DLLs einfach im nachhinein dazunehmen und die Methoden nutzen.

Ich stelle mir das so vor, dass ich links wie gesagt mein Menü habe und in der rechten Hälfte ein Control, dass immer die Funktionalität des selektierten Moduls zeigt. Bespiel:
ich habe ein Modul "Adresseingabe" und wenn ich das anklicke, sehe ich rechts Felder, wo ich Adressen eingeben kann.
Dann kommt eine weitere DLL hinzu, die mir das Menü erweitert, so dass ich Artikel eingeben kann (in dem Eingabebereich rechts)...

wonach muss ich suchen, um meine Idee umzusetzen?

VIelen DAnk Leute 😃

946 Beiträge seit 2008
vor 14 Jahren

Wenn ich dich richtig verstanden habe nach Plugin?
[QUOTE3=: [FAQ] Eigene Anwendung pluginfähig machen,http://www.mycsharp.de/wbb2/thread.php?threadid=34472]Denkbar wäre eine einfache, eigene Lösung bei der mit Hilfe von Reflection alle DLL Dateien aus einem Plugin-Verzeichnis geladen werden und nach Klassen gesucht wird, die eine bestimmte Schnittstelle implementieren.[/quote3]
Dazu siehe wiederum [Artikel] Reflection und Metaprogrammierung.

Mit WPF direkt hat das ja nichts zu tun.
Habe ich das richtig verstanden?

mfg
SeeQuark

X
XXL Themenstarter:in
95 Beiträge seit 2006
vor 14 Jahren

hi..

danke, werde ich morgen mal durchlesen.

nein, hat nichts direkt mit WPF zu tun. wobei ich es mit WPF oder Silverlight realisieren will.

Ich brauche halt was, was in einem Ordner nach DLLs sucht und diese dann einbindet.
Reflections braucht man da mit Sicherheit zu. Aber bestimmt auch ne Art DLL oder Assembly loader.. Da stecke ich noch etwas fest

N
29 Beiträge seit 2009
vor 14 Jahren

So bindet mal eine DLL ein:


[DllImport("user32.dll", CharSet = CharSet.Auto)]

Du könntest das ganze Laden in einer Form der Lazy initialization machen.

Man kann dein Problem verschieden anpacken, aber ich denke die Umsetzung mit den Dll Files könnte recht umständlich werden wenn du deine Anwendung in zu viele Unterbereiche unterteilst.

Leider kann ich dir nicht mehr Hilfe anbieten bin neu im C# Umfeld.

Gruß
nava

946 Beiträge seit 2008
vor 14 Jahren

So bindet mal eine DLL ein:

So macht man P/Invoke, bindet also eine unmanaged dll ein 😉
Ausserdem muss der Pfad schon bekannt sein.

Ich dachte da eher an Assembly.Load(path).

mfg
SeeQuark

X
XXL Themenstarter:in
95 Beiträge seit 2006
vor 14 Jahren

also es ist eine managed dll und ich kenne den namen gar nicht (nicht wenn ich das Main Tool programmiere).
nochmal. ich packe einfach neue module (Dlls) in einen ordner und lade automatisch alle DLLS rein, die in dem ordner liegen..

das habe ich zumindest vor...

N
29 Beiträge seit 2009
vor 14 Jahren

So bindet mal eine DLL ein:
So macht man P/Invoke, bindet also eine unmanaged dll ein 😉
Ausserdem muss der Pfad schon bekannt sein.

Ich dachte da eher an
>
.

mfg
SeeQuark

Ich hätte da mal eine Frage. Mir ist aufgefallen das hier in diesem Forum oft von Reflection zu sprechen ist. Ich komme aus dem Java Umfeld und dort wird Reflection doch eher als leztes Mittel angesehen. Ist das im C# Bereich anderst?

gruß
nava

M
402 Beiträge seit 2005
vor 14 Jahren

Also für mich klingt das nach einer PlugIn/AddIn fähigen Anwendung.

Es gibt schon jede Menge Themen dazu hier im Forum.

z.B. [FAQ] Eigene Anwendung pluginfähig machen

Und auf http://www.codeproject.com/ gibts soweit ich mich erinnere ein paar Beispiele...

5.742 Beiträge seit 2007
vor 14 Jahren

Ich komme aus dem Java Umfeld und dort wird Reflection doch eher als leztes Mittel angesehen. Ist das im C# Bereich anderst?

Na ja, ich weiß zwar nicht, wie das im Java-Bereich aussieht, aber gerade für Pluginarchitekturen / IoC bzw. DI / Persistierung ist Reflection unter .NET eigentlich erste Wahl.
Alternativen gibt es ja auch nicht wirklich - außer man möchte endlos lange Konfigurationsdateien schreiben und warten.

Man sollte es nur nicht übertreiben mit der Reflection; sie sollte auch immer "versteckt" sein - d.h. dass man sie im Code nicht direkt verwendet, sondern irgendwie gekapselt. Das ist z.B. der Fall, wenn man ein interface "IObjectFactory" verwendet, dass eine Methode "T Create<T>()" bereitstellt - ob das intern dann Reflection verwendet, ist für den Aufrufer dann egal.

Aber du hast schon Recht: Mit Reflection kann man einigen "Unfug" anstellen bzw. die Codequalität erheblich senken.
Gerade Anfänger können allerdings hier nicht unterscheiden, wann der "saubere" Code endet und der "unsaubere" Code beginnt; daher wird auch vermutlich der Ratschlag "Reflection als letztes Mittel" herkommen.