AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein .NET-Framework (managed code) C# Womit höchstmodulare WPF-Anwendungen erstellen?
Thema durchsuchen
Ansicht
Themen-Optionen

Womit höchstmodulare WPF-Anwendungen erstellen?

Ein Thema von Mithrandir · begonnen am 20. Mär 2011 · letzter Beitrag vom 28. Mär 2011
 
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#5

AW: Womit höchstmodulare WPF-Anwendungen erstellen?

  Alt 21. Mär 2011, 07:39
Naja, ein paar Zeilen mehr sinds schon.

Erstmal alle Files die mit .dll enden laden:

Code:
foreach (var file in Directory.GetFiles(AppDomain.CurrentDomain.RelativeSearchPath, "*.dll"))
{
   try
   {
      Assembly.LoadFrom(file);
   }
   catch { } // fine here. Existing .dll could be a native library
}
Nun hast Du alle Assemblies verfügbar und kannst daraus alle Typen ermitteln, die Du benötigst. Dazu gibts ne kleine Helfermethode:

Code:
private static List<Type> FindTypes<T>()
{
  return AppDomain.CurrentDomain.GetAssemblies()
    .Select(a => a.GetTypes())
        .SelectMany(a =>
          a.Where(t => t.IsClass && !t.IsAbstract && typeof(T).IsAssignableFrom(t)))    
    .ToList();
}
Sagen wir Du hast ein Interface namens IMyPlugin und das definiert ne Methode Load() dem Du Deinen Plugin-Host übergibtst, dann initialisierst Du alle Plugins so:

Code:
foreach (var pluginType in FindTypes<IMyPlugin>())
{
    IMyPlugin instance = (IMyInterface) Activator.CreateInstance(pluginType);
    instance.Load(this); // oder whatever halt  
}
In load können die sich dann in ne List<IMyPlugin> auf dem Host legen oder Du merkst Sie Dir irgendwie anders.

Wenn Du nicht gleich alle instanzieren willst kannst Du natürlich auch einfach die Typen aus der Liste anzeigen und nur einzelne instanzieren. Mittels Custom Attributen kannst Du auch noch weitere Informationen zu den Plugins ausgeben etc. .NET ist da ziemlich mächtig *g*
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org

Geändert von Phoenix (21. Mär 2011 um 07:40 Uhr) Grund: Cast vergessen beim instanzieren...
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz