Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Module im laufenden Betrieb laden
XXL
myCSharp.de - Member



Dabei seit:
Beiträge: 95

Themenstarter:

Module im laufenden Betrieb laden

beantworten | zitieren | melden

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 :)
private Nachricht | Beiträge des Benutzers
SeeQuark
myCSharp.de - Member

Avatar #avatar-2825.jpg


Dabei seit:
Beiträge: 959

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
XXL
myCSharp.de - Member



Dabei seit:
Beiträge: 95

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Nava
myCSharp.de - Member



Dabei seit:
Beiträge: 29

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Nava am .
private Nachricht | Beiträge des Benutzers
SeeQuark
myCSharp.de - Member

Avatar #avatar-2825.jpg


Dabei seit:
Beiträge: 959

beantworten | zitieren | melden

Zitat von Nava
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
private Nachricht | Beiträge des Benutzers
XXL
myCSharp.de - Member



Dabei seit:
Beiträge: 95

Themenstarter:

beantworten | zitieren | melden

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...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von XXL am .
private Nachricht | Beiträge des Benutzers
Nava
myCSharp.de - Member



Dabei seit:
Beiträge: 29

beantworten | zitieren | melden

Zitat von SeeQuark
Zitat von Nava
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


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
private Nachricht | Beiträge des Benutzers
[email protected]
myCSharp.de - Member



Dabei seit:
Beiträge: 407

beantworten | zitieren | melden

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...
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 6155
Herkunft: Stuttgart

beantworten | zitieren | melden

Zitat von Nava
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.
private Nachricht | Beiträge des Benutzers