Laden...

[gelöst] MEF Metadata Iconpfad, wie in Host aufloesen?

Erstellt von sth_Weird vor 11 Jahren Letzter Beitrag vor 11 Jahren 996 Views
S
sth_Weird Themenstarter:in
469 Beiträge seit 2007
vor 11 Jahren
[gelöst] MEF Metadata Iconpfad, wie in Host aufloesen?

Hallo,
ich übe mich gerade zum ersten Mal in MEF, wobei die Frage wahrscheinlich nicht MEF spezifisch ist.
Ich habe eine Host-Anwendung gebastelt und einige Dlls mit Extensions=Plugins, jedes Plugin hat Metadaten (IPluginMetadata Interface mit den Daten PluginName, PluginDescription, PluginAuthor, PluginVersion, HasMultiInstanceSupport, PluginIcon).
Im PluginIcon schreibe ich den Pfad zu einem Icon rein, das in der Dll liegt, in welchem auch das Plugin selbst liegt (z.B. "Resources/plugin.ico").
In meinem Host habe ich nun eine Listbox, die alle Plugins mit Icon und Name auflisten soll (DataTemplate mit Image und TextBlock habe ich bereits implementiert). Nun steht aber im Icon-String jedes Plugins nur "Respources/plugin" drin. Wie komme ich nun am besten von meinem Host aus an dieses Icon aus der anderen Dll?
Diese Ideen hatte ich bereits:
--> Da ich ja ein ViewModel verwende, lade ich da das Bild direkt und übergebe dem View dann das Bild anstelle eines Pfades
--> Vielleicht gibt es eine Möglichkeit, dem relative Pfad "Resources/plugin.ico" einen String vorzustellen, damit das Laden auch so geht...falls das geht, gibt es da was vorgefertigtes? Ist das sowas wie beim Laden von Resourcen aus anderen Assemblies?
--> Ist es einfacher, wenn ich das Icon in der Plugin-Dll als Resource habe und nicht einfach als Datei?
--> Oft sieht man auch, dass bei professionellen Programmen Icons einfach so im exe Verzeichnis oder einem Unterverzeichnis liegen...es wäre ja auch noch denkbar, das Plugin-Icon einfach dorthin zu kopieren und von dort zu laden, anstelle es direkt in der Dll eingebettet zu haben

Wie würdet ihr das realisieren?

Vielen Dank schon jetzt für eure Tipps!
sth_Weird

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+

6.862 Beiträge seit 2003
vor 11 Jahren

Ist das sowas wie beim Laden von Resourcen aus anderen Assemblies? Genau sowas sollte es sein 😃Was dir eigentlich bei der URI zum Bild nur fehlt ist der Assemblyname, der sollte sich aber bekommen lassen über den Typen des Plugins. Hier wird der gleiche Vorschlag gemacht.

Ist es einfacher, wenn ich das Icon in der Plugin-Dll als Resource habe und nicht einfach als Datei Muss es unbedingt sein für obige Variante.

es wäre ja auch noch denkbar, das Plugin-Icon einfach dorthin zu kopieren und von dort zu laden Damit wäre dein Programm auf "normalen" PCs nicht mehr lauffähig weil eingeschränkte User, wies heutzutage Standard ist, keine Schreibrecht im Programmverzeichnis haben.

Baka wa shinanakya naoranai.

Mein XING Profil.

S
sth_Weird Themenstarter:in
469 Beiträge seit 2007
vor 11 Jahren

Funktioniert wunderbar, danke!

die URI habe ich so gebildet:

...new Uri(string.Format(@"pack://application:,,,/{0};component/{1}", this.plugin.GetType().Assembly, this.pluginMetadata.Icon), UriKind.Absolute)

Oder gibt es dafür schon eine schönere, vordefinierte Methode irgendwo in den vorhandenen Bibliotheken von .NET, wo man nur noch Parameter einsetzen muss und das pack://... automatisch dazugebastelt wird? Es wurde auf msdn nichts dergleichen erwähnt deshalb bin ich mal davon ausgegangen ich muss das selbst zusammenbasteln.

ansonsten sage ich mal solved.

gruß
sth_Weird

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+