| 

.NET C# Java Javascript Exception

7
Hallo,

mal eine etwas offenere Frage. Aktuell stehe ich vor folgendem Problem:

Ich habe eine WPF-Applikation, in dieser WPF-Applikation befindet sich ein Tab-Control. Der Inhalt jedes Tabs soll ein eigenes Projekt sein, welche sich dann dynamisch erweitern lassen sollen.

Beispiel wäre, dass ich z.B. eine "Hello World"-Applikation hätte, die ich in meine Container-Applikation lade. In dieser taucht dann ein neuer Tab auf, in dem ich einen Knopf drücke und "Hello World" erscheint.
Diese "Hello World"-Applikation soll aber ein komplett separates Projekt sein und wirklich nur über Schnittstellen mit der Container-Application kommunizieren.

Jetzt frage ich mich allerdings, was wohl der beste Weg wäre. Das System.AddIn Framework von C# nutzen (sieht relativ Komplex aus)? Eine Klassenbibliothek mit WPF-UserControl versehen und versuchen das irgendwie ans Container-Programm zu übergeben? Etwas komplett anderes?

Vielleicht hat ja jemand schon Erfahrungen in der Richtung gesammelt und kann mir einen Stoß in die richtige Richtung geben.
07.05.2012
Feroc 1,2k 2 9
Inwieweit müssen denn die Tabs *untereinander* interagieren?
kleffel 07.05.2012
@kleffl: Gar nicht, die einzelnen Tabs sind vollkommen unabhängig voneinander. Maximal mit der Containerapplikation muss eine Kommunikation möglich sein.
Feroc 08.05.2012
3 Antworten
5
In solchen Fällen bieten sich zwei Frameworks an. Da hätten wir zum einen Prism mit dem du von der Initialisierung deiner Module, über die interne Kommunikation bis hin zum richtigen Einsatz von MVVM alles abdeckst was du dir nur vorstellen kannst. Nachteilig ist hierbei, dass die Lernkuve anfangs recht steil ist. Evtl. hilft dabei aber auch die Seite.

Eine weitere, auch etwas einfacherere, Alternative soll wohl Caliburn bzw. Caliburn.Micro sein aber das habe ich noch nicht eingesetzt.
08.05.2012
Hendrik Lösch 1,5k 1 9
Danke, das werde ich mir mal genauer ansehen. Auch wenn sich inzwischen die Projektanforderungen wieder geändert haben und nun doch eine WebApplikation wird.
Feroc 08.05.2012
2
Ebenso wie Hendrik habe ich auch an PRSIM oder eine leichtgewichtigere Variante gedacht (auch eine selbst geschriebene Variante; du scheinst ja bereits Ideen zu haben). Je nach Anwendungsszenario und Projektgröße kann das eine oder andere bereits ausreichen.

Wenn Du Dich nicht mit der Anforderung konfrontiert siehst, Deine Plugins wieder zu entladen bzw. Deine Plugins potentiell Deine Applikation zum Absturz bringen können, ist dieser Ansatz zu empfehlen.

Wenn Du allerdings Deine Plugins wieder entladen möchtest oder sie in einem eigenen Security-Context(Sandbox) laufen lassen möchtest (weil sie potentiell nicht vertrauenswürdig sind), dann musst Du Plugins in eine eigene AppDomain laden. Damit wird die Kommunikation und Synchronisation von Container und Plugin etwas aufwändiger. Prinzipiell ist das aber möglich.
Hier hat jemand schon mal so etwas gemacht.

Das Managed Addin Framework, das Du angepsrochen hast, bringt die Fähigkeit der Isolation schon mit, ist also allemal einen Blick wert, wenn Du das benötigen solltest.
08.05.2012
ffordermaier 8,4k 3 9
1
Wie Hendrik und ffordermaier schon geschrieben haben, ist Prism dem Grunde nach eine Möglichkeit Dein Anliegen zu bewerkstelligen. Ich habe selbst auch schon die eine oder andere Lösung mit Prism umgesetzt. Hier sollte allerdings meiner Meinung darauf geachtet werden, dass nicht gleich mit Kanonen auf Spatzen geschossen wird, denn - wie Hendrik schon schrieb, ist Prism extrem mächtig und bringt jede Menge "Nettigkeiten" mit, die aber auch erlernt und angewendet werden wollen, damit das System in sich rund läuft.

Hast Du keine allzu komplexe Aufgabe, die sich mit "ein paar" Modulen erledigen lässt, halte ich das Caliburn.Micro-Framework in Kombination mit MEF für das Maß der Dinge (rein persönlicher Geschmack). Wenn Du Dich über das Caliburn.Micro informieren möchtest, kannst Du den Link in Hendriks Antwort nehmen und/oder Dir mal auf Channel9 das Video (Vortrag auf der MIX10) zur Entstehung des Frameworks von Rob Eisenberg (http://channel9.msdn.com/Events/MIX/MIX10/EX15) anschauen. Ist richtig gut und hilft, das Eine oder Andere zum Hintergrund dieses Frameworks zu verstehen.
08.05.2012
AndreasH 11 2
Ich würde den Einsatz von Caliburn nicht Anwendungen auf "ein paar Module" reduzieren. Man kann mit CM/MEF alles machen, was auch mit Prism geht, so weit ich das beurteilen kann. Mit dem Vorteil, das CM von Haus aus mit ViewModelFirst arbeitet, während man bei Prism nach Workarounds suchen muss. ViewFirst fühlt sich für mich eher umständlicher an, da ich mit Klassen arbeiten möchte und nicht mit UserControls.

Und den Komfort von Convention over Configuration möchte ich nicht mehr missen. Ich muss immer lächerln, wenn ich in anderen Code auf ICommands stosse.
Jens Duczmal 08.05.2012
Ich würde den Einstatz von Caliburn nicht nur auf Anwendungen mit "ein paar Modulen" reduzieren - muss es natürlich lauten.
Jens Duczmal 08.05.2012
Hallo Jens,

mir ist durchaus bewusst, dass sich (theoretisch) auch große Enterprise Lösungen damit bewerkstelligen lassen, "ein paar" ist daher explizit in Anführungszeichen gesetzt. Ich möchte jedoch (persönlicher Geschmack) im Enterprise-Umfeld nicht auf die Funktionalitäten und Möglichkeiten von Prism verzichten, da ich die an Caliburn.Micro sonst händisch anfügen müsste... ;-)

Aber dem Grunde nach hast Du Recht.
AndreasH 10.05.2012
Noch was, ich rede von Caliburn.Micro und nicht von Caliburn (welches ja nicht mehr weiterentwickelt wird). Nur das keine Missverständnisse auftreten... ;-)
AndreasH 10.05.2012

Stelle deine .net-Frage jetzt!