Forum: PC-Programmierung C# Hilfe bei DLL und exe Problem


von Farin (Gast)


Lesenswert?

Hei Leute

Ich habe ein Problem mit meinem C#-Projekt. Ich habe ein Grundprojekt 
welches eigentlich nur aus einer Form besteht. Während der Laufzeit 
werden dll-Dateien geladen die dann die Menüs etc. bilden. Dies 
geschieht aufgrund der Tatsache dass das Tool in so vielen Versionen 
existieren muss.

Jetzt steh' ich vor einem Problem. Ich habe in meiner Exe eine Klasse 
die ich in der DLL auch benötige. Die Klasse ist mit dem 
Singletonpattern umgesetzt und ich benötige in beiden die gleiche 
Instanz davon. Wie kann ich nun also implementieren, dass ich von der 
dll und der exe auf diese Klasse zugreifen muss? (Wenn möglich ohne dass 
ich eine dritte dll bauen muss)

Viel Danke und viel Gruss..  ;-)

Farin

von Sharping (Gast)


Lesenswert?

Ohne den Kontext jetzt genau zu kennen würde ich das so machen:

 - baue eine dritte DLL (ohne geht's nicht!).
 - in dieser legst du ein Interface für deine Singleton-Klasse an
 - Diese DLL wird von der EXE und deinem Plugin referenziert.
 - In der exe gibt es zusätzlich eine Klasse, die das Interface 
implementiert.
 - Zur Laufzeit wird in der exe ein Objekt von dieser Klasse 
instanziiert.
 - Das übergibst du dann der DLL, sobald sie geladen wurde.

Und schon sind alle glücklich ;-)

von Sebastian L. (Gast)


Lesenswert?

Das kommt jetzt ganz drauf an welche Architektur du sonst hast und wie 
die Abhängigkeiten sind

Da du ja schon die Abhängigkeit in Richtung der DLL hast, könnte die DLL 
Funktionen zur Erzeugung und Verwaltung des Objekts zur Verfügung 
stellen die dann natürlich auch von der dll selbst genutzt werden 
können. Es ginge also schon ohne dritte dll, vorausgesetzt die 
Architektur ist einigermaßen in Ordnung
Wenn das die EXE machen würde hättest du eine zyklische Abhängigkeit.

Wenn das Objekt Daten zur Verfügung stellt, die dann auch gespeichert 
werden wäre eine separate dll die das verwaltet definitiv anzuraten.

von Sharping (Gast)


Lesenswert?

Sebastian L. schrieb:
> Es ginge also schon ohne dritte dll

Sicher? Zur Kompilezeit kennt die exe die DLL ja noch garnicht, wie soll 
sie dann mit einer Klasse aus der DLL arbeiten?

von Farin (Gast)


Lesenswert?

Hi Sharping

Wenn ich nach deiner Lösung vorgehe und eine dritte Dll schreibe wäre es 
doch sowieso einfacher die Klassen in die neue DLL zu kopieren und 
einfach eine Referenz draufzusetzen aus der exe und der dll. So Spare 
ich mir das Interfacegebastel.

Gibts es deiner Meinung echt keine Möglichkeit das System zu 
vereinfachen oder bin ich zu blöd den Wald vor lauter Bäumen zu sehen? 
^^

von Sharping (Gast)


Lesenswert?

Du kannst natürlich auch auf die Interfaces verzichten. Würde ich 
allerdings nicht tun ;-)
Es ist ja durchaus absehbar, dass du die Implemntierung der 
Singleton-Klasse verändern willst (bugs fixen o.Ä. In deinem fall 
müsttest du dann die 3. DLL neu kompilieren, die Plugin-DLL neu 
Kompilieren und die .exe neu kompilieren.

Wenn du in der 3. DLL und dem Plugin aber nur ein Interface verwendest, 
brauchst du die nie wieder anzufassen. Dann kannst du in der .exe an der 
Klasse rumbasteln bis der Arzt kommt.

von Sebastian L. (Gast)


Lesenswert?

Das geht ganz gut mit refelction ist aber dann nicht typsicher das ist 
ganz klar

Was noch möglich ist. Wenn die exe keine abhängigkeit zur dll hat, 
könnte man in der exe das interface deklarieren und dann die dll davon 
abhängig machen.


Ich frage mich nur:
Wenn die Exe mehr oder weniger nur eine form ist und die dll die logik 
liefert, warum die exe das objekt kennen muss.


Also so lange deine Architektur nicht bekannt ist, ist die 
intelligenteste und einfachste Lösung die zusätzliche dll.

von Farin (Gast)


Lesenswert?

Also für den Aufbau. Die Klasse ist eine Ressourcen-Klasse sie speichert 
gewisse Instanzen von Objekten und gibt diese zurück. Diese aufgrund der 
Tatsache dass die Objekte nicht mit dem Singleton-Pattern übergeben 
werden können. Die Form hat gewisse Grundfunktionalitäten welche die Dll 
zur Laufzeit erweitert je nach Version die man hat stehen andere 
Funktionen zur Verfügung welche die Grundfunktionalitäten erweitern.

Ich hoffe das war in irgendeiner Weise verständlich ^^

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.