Ich habe eine Klasse in meiner Prism/CAL-Anwendung, die ein Formular generiert , in das Benutzer Daten eingeben können.
Das Formular wird von einer XML Datei wie folgt definiert:
Anrede
Anrede
Vorname
Text
Nachname
Text
E-Mail
E-Mail
...
Das Formular muss spezifische Steuerelemente laden, die jedem Feldtyp im XML entsprechen, z.B.
- Anrede (zeigt ein Dropdown-Menü: Herr, Frau, Dr., usw.)
- Text (einfaches Textfeld)
- E-Mail (Textfeld mit E-Mail-Validierung)
- PLZ (Textfeld mit Postleitzahlen-Validierung)
Ich möchte jedes Steuerelement zu einem separaten Modul machen, das geladen wird, sodass z.B. das PLZ Modul als Datei im Modules Verzeichnis existieren würde:
PLZ.dll
das nur ein einfaches Textfeld Steuerelement ist, das anhand der Postleitzahl validiert, aber Entwickler könnten ein weiteres Steuerelement namens:
PLZPlus.dll
erstellen, das die gleiche Schnittstelle erbt, aber einen Popup-Geo-Earth-Selektor für Postleitzahlen bereitstellt. Sobald ein Kunde PLZ.dll durch PLZPlus.dll ersetzt, hätten alle seine Formulare diese neue Funktionalität zur Suche nach Postleitzahlen.
Ich habe jedoch Schwierigkeiten zu visualisieren, wie dies technisch umgesetzt wird, da meine Formklasse beim Parsen des XML die Klassen instanziiert, die die Funktionalität für die Steuerelemente bereitstellen, aber um die Klasse zu instancieren, muss ich eine Referenz dazu haben:
SmartFormFieldPLZPresenter smartFormFieldEmailPresenter
= container.Resolve();
Wie kann ich es jedoch dynamisch instanziieren, d.h. mit dem Klassennamen als String, und wenn diese Klasse nicht existiert, eine entsprechende Ausnahme auslösen, z.B. so etwas wie:
PSEUDO-CODE:
try {
var smartFormFieldPLZPresenter
= container.Resolve("smartFormFieldPLZPresenter");
}
catch (ModulExistiertNichtException) {
...
}