Hallo Forum,
ich arbeite gerade an einem PlugIn System um eine meiner Anwendungen mit weniger Aufwand erweitern zu können. Soweit funktioniert nun schon alles. Ich habe nur das Problem, dass ich keine Konfigurationen zu den PlugIns erstellen kann.
Zur Lösung des Problem sind mir zwei Ideen gekommen.
Ich lege zu jedem PlugIn eine App.Config an. Leider klappt das nicht, weil das PlugIn diese nicht lesen kann. Klar, weil das PlugIn imm Kontext meines Hosts läuft.
Das PlugIn muss seine Konfig selbst laden. Im Standardkonstruktor kann ich also xml Deserialisieren. Klingt schonmal nicht schlecht. Vorteil: der Host hat nichts mit der Konfiguration des PlugIns zu tun. Nachteil: Es gibt kein einheitliches System für die Konfiguration.
Wie löst Ihr solche Sachen? Habt Ihr besser Lösungen als meine zweite Idee?
Leg doch in dem Config-File deines Hosts beim Einspielen der Plugins eine eigene Config-Section an. Du müsstest dann zwar im schlimmsten Fall eine Methode in deinen Plugins vorsehen die dir eine Dummy-Konfiguration erstellt aber du hättest alles schön zentral bei einander. (Wobei du ja die Config-Files der Plugins auch auslagern könntest und im Config-File deines Hosts darauf verlinkst.)
As a man thinketh in his heart, so he is.
Hast du für diesen Lösungsweg ein Beispiel zur Hand. Mich interessiert besonders die Config Section (Einlesen) und das Auslagern.
In dem kleinen HowTo hast du alle Infos die du brauchst, einschließlich dem Auslagern.
As a man thinketh in his heart, so he is.
Hi,
für dich ist vielleicht diese Antwort zu "C# Dll config file" auf stackoverflow interessant.
Wenn du dir dies zu Gemüte geführt hast, kannst du gern einen Blick in How to have configuration file for DLL reinwerfen.
beste Grüße
zommi
Ich danke euch. Eine Menge Informationen die ich mir jetzt mal zugemüte führen werde.
Etwas verunsichert mich jedoch gerade an meinem PlugIn System. Ich versuche wann immer möglich nach den CleanCodeDeveloper Prinzipien zu programmieren. Nun erstelle ich gerade abstrakte Klassen in meiner Interface Assembly um die Klasse meines DataAccess Layers an die PlugIns weitergeben zu können ohne, dass diese meinen DataAccess Layer referenzieren müssen. Irgendwie scheint das nicht gerade dem "Don't repeat yourself"-Prinzip zu entsprechen. Da ich zumindest die Properties alle nocheinmal schreiben muss.
Hallo!
Versuche mal, mit einem IoC/DI-Container zu arbeiten. Für die Konfiguration könntest du einen ConfigurationService schreiben, welcher im Container registriert wird und Konfigurationen entgegennehmen kann, z.B. eine Klasseninstanz, wo die Properties per Reflection ausgelesen werden (Performance sollte hierbei keine Hauptrolle spielen).
Dann müssen deine PlugIns eigentlich nur den ConfigurationService bzw. dass entsprechende Interface vorhalten, die verwaltung der Konfigurationen erfolgt zentral und den PlugIns kann es egal sein, wo du die Konfigurationen speicherst. Theoretisch kannst du diese dann sogar zusammen mit der Programm-Konfiguration z.B. in der appconfig speichern.
Nobody is perfect. I'm sad, i'm not nobody 🙁