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
Antwort Antwort
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#1

Womit höchstmodulare WPF-Anwendungen erstellen?

  Alt 20. Mär 2011, 19:40
Hi ihr,

Frage steht eigentlich schon im Titel - womit geht das am Besten? Ziel ist eigentlich, dass ich eine Basisanwendung erstelle, und anschließend alles über Zusatzplugins gelöst wird, die auch nach belieben hinzugefügt oder weggelassen werden können. Das Kernprogramm übernimmt nur die Steuerung der Kommunikation der einzelnen Elemente und verwaltet die Module.

Womit könnte ich sowas in CSharp + WPF umsetzen?
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#2

AW: Womit höchstmodulare WPF-Anwendungen erstellen?

  Alt 20. Mär 2011, 20:32
Na da fallen mir spontan gleich 2 Kürzel ein, mit denen sich das Problem einfachst lösen läßt:
WAF und MEF

Die Lernkurve ist nicht ganz klein, aber es lassen sich damit dann wirklich einfach Anwendungen erstellen, die über Plugins erweitert werden können. Zumindest MEF nutzt Microsoft selbst, um ihr Visual Studio 2010 mit Addins erweiterbar zu machen.

Ich nutze beides seit einiger Zeit zusammen und bin echt begeistert.

Geändert von KrasserChecker (20. Mär 2011 um 20:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#3

AW: Womit höchstmodulare WPF-Anwendungen erstellen?

  Alt 20. Mär 2011, 21:06
Ein Plugin-System ist in .NET mittels ein paar Zeilen zu machen.
Man braucht lediglich ein Interface, welches das Plugin implementieren muss. Mittels Reflection kann man dann alle alle Assemblies mit den Plugins (z.B. aus einem bestimmten Verzeichnis) laden, dort nach Klassen suchen die dieses Interface implementieren, diese instanzieren und that's it.

Das finden der entsprechenden Klassen ist mit LINQ ein Einzeiler: Assembly.GetTypes().Where(t => t.IsSubclassOf(typeof(YourInterface)))
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#4

AW: Womit höchstmodulare WPF-Anwendungen erstellen?

  Alt 21. Mär 2011, 08:20
Danke euch beiden...

@Phoenix: SO einfach? Und mit dieser Methode kann ich auch dynamisch Assemblies laden? Ich bin mir noch nicht ganz sicher, wie ich das genau umsetze. Eigentlich möchte ich dem User die Möglichkeit geben, für eine Aktion zwischen mehreren Modulen wählen zu können und ggf. ein Standardmodul zu definieren. Ähnlich wie Android, welches ja auch komplett modular aufgebaut ist.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

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

AW: Womit höchstmodulare WPF-Anwendungen erstellen?

  Alt 21. Mär 2011, 08: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 08:40 Uhr) Grund: Cast vergessen beim instanzieren...
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#6

AW: Womit höchstmodulare WPF-Anwendungen erstellen?

  Alt 21. Mär 2011, 15:05
Hm... Ich bin grad über Prism gestolpert - klingt eigentlich auch interessant...

//Edit: Ach... Danke fürs Beispiel...
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell

Geändert von Mithrandir (21. Mär 2011 um 15:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Womit höchstmodulare WPF-Anwendungen erstellen?

  Alt 25. Mär 2011, 01:08
Was mir in dem Zusammenhang noch einfällt, wäre Caliburn Micro.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#8

AW: Womit höchstmodulare WPF-Anwendungen erstellen?

  Alt 25. Mär 2011, 14:57
Also mein erster Tipp wäre auch Prism gewesen. Der zweite Caliburn.Micro mit MEF.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#9

AW: Womit höchstmodulare WPF-Anwendungen erstellen?

  Alt 28. Mär 2011, 21:14
Danke euch - auch wenn ich noch ein wenig Schlucke, was die Lernkurve von Prism angeht.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz