VB.NET >> Addins in VB.NET?
Griever
- programmiertechnik
0 Klaus Mock0 Griever
0 Frank (no reg)
Hi.
Ich suche seit langem nach einer Möglichkeit, dynamisch Addins ins programm zu laden und zu verwenden.
Das ganze soll so von statten gehen:
Programmstart
Ornder [programmordner]\addins\ wird nach Addin-dll's durchsucht.
Die gefundenen DLL-Dateien werden versucht ins programm einzubinden.
(z. b. für neue Funktionen, die im Menü unter Extras > Addins >... erscheinen. oder für Funktionskorrekturen)
Wäre echt super, wenn jemand ein brauchbares Tutorial oder ein verständlichen Code posten könnte.
MFG
Griever
Hallo,
Ich suche seit langem nach einer Möglichkeit, dynamisch Addins ins programm zu laden und zu verwenden.
Wäre echt super, wenn jemand ein brauchbares Tutorial oder ein verständlichen Code posten könnte.
Ist zwar nicht in VB.NET aber es sollte doch recht leicht umzusetzen sein:
http://www.codeproject.com/KB/cs/c__plugin_architecture.aspx
Grüße
Klaus
Ist zwar nicht in VB.NET aber es sollte doch recht leicht umzusetzen sein:
http://www.codeproject.com/KB/cs/c__plugin_architecture.aspx
Scheint in C# zu sein. Das lässt sich problemlos mit SharpDevelop in VB.NET umwandeln.
Danke für die Hilfe ^^ (aber das andere kapier ich überhaupt nicht)
MFG
Griever
Hi,
dafür benötigst du u.a. folgende Dinge:
public interface IPluginOderWasAuchImmer
{
IContext Context { get; set; } // brauchst du u.U. für die Rückverbindung vom Plugin zum Host
void Execute();
}
sollte da schon mal geeignet sein
Eigene Attributklassen für Typen und Assemblies sind auch förderlich
du benötigst System.Reflection um Assemblies dynamisch zu laden und nach Typen (welche IPlugin implementieren und ggf bestimmte Attribute besitzen) zu durchsuchen
du benötigst (wahrschweinlich) ein Manager Singleton um die geladenen Plugin-Konfigurationen (welche Typen in welchen Assemblies) zu verwalten, damit du die Suche mit Reflection nicht ständig aufs neue durchführen musst
du benötigst dann ein Factory Pattern welches dir die Instanzen vom jeweiligen Plugin über das Interface erstellt
However, ich persönlich würde die Sache über Commands lösen, was aber am vorher geschriebenen äusserst wenig ändert. ;)
Ciao, Frank