2009-07-28 9 views
1

Ich suche ein Projekt in Silverlight 3 unter Verwendung von Prism und ich mag die Vielseitigkeits Aggregation zu tun als http://development-guides.silverbaylabs.org/Video/Prism-EventingKann ich Ninject für die Prism-Ereignisaggregation in Silverlight verwenden?

hier gezeigt Alle Ressourcen scheinen mit Unity mit Prism zu zeigen und nicht Ninject. Gibt es in Ninject eine ähnliche Möglichkeit, Ereignisse zu aggregieren? Oder wenn ich Prism verwenden möchte, bin ich auf Unity beschränkt?

Antwort

8

Sie haben hier Glück.

Die EventAggregation in Prism ist keine Funktion des Unity-Containers, sondern etwas, das Prism automatisch in den Container für Clientklassen einfügt. Daher deklarieren Klassen, dass sie eine IEventAggregator-Abhängigkeit haben, und eine Instanz davon wird dieser Klasse über die Abhängigkeitsinjektion zugewiesen. Die Sache, die hier weggenommen werden muss: Es ist eigenständig.

Sie haben also mehrere Möglichkeiten.

  1. Wenn Sie eine der anderen Funktionen von Prism (Komponentenmodularität usw.) brauchen Sie nicht einfach Ninject verwenden und eine Instanz des Eventaggregator in Ihren Ninject Container für den Rest der Anwendung einfügen verwenden .

  2. Wenn Sie die anderen Funktionen von Prism möchten, können Sie die DI-Container-Implementierung ersetzen. Ich konnte leider kein spezifisches Beispiel dafür finden, aber ich denke, du müsstest nur den Basis "UnityBootstrapper" -Typ mit einem deiner eigenen "NinjectBootstrapper" neu implementieren. Ich denke, dass UnityBootrapper der einzige Punkt ist, an dem die Prism-Komponenten (EventAggregator, RegionManager, etc.) mit Unity in Kontakt kommen (speziell in der Implementierung von "ConfigureContainer"). Bearbeiten: Ich liege falsch hier. Sie müssen IServiceLocator auch mit einer Ninject-spezifischen Implementierung implementieren. Keine große Sache, aber.

  3. Embrace Einheit. Es ist ein ziemlich guter DI-Container mit viel Flexibilität. Es hat nicht die fließende Oberfläche, die Ninject hat, aber es ist sicherlich nicht schwer zu bedienen.

  4. Sie können ein anderes ähnliches Ereignissystem verwenden, das in der MVVMFoundation enthalten ist (http://mvvmfoundation.codeplex.com). Es heißt Messenger und es macht ziemlich genau das, was der EventAggregator in Prism macht, aber die Bibliothek, die du herunterlädst, ist viel leichter.

Hoffe, das ist genug Optionen für Sie!

+0

Wow, das ist jetzt eine umfassende Antwort. Danke vielmals. Ich bin mir nicht sicher, welche Route ich noch nehmen werde. Der einzige Grund, warum ich Ninject gegenüber Unity bevorzuge, ist, dass ich Ninject in einigen Web-Apps benutze und ich dachte, es wäre gut, nur 1 DI-Produkt zu lernen, aber ich denke, dass Unity noch mehr darüber nachdenkt. Danke für Ihre Eingabe! –

+0

Große Antwort! Mit Pt2; Erstellen Sie die Implementierung von IServiceLocator. Warum brauchen Sie es? Und wem sollten Sie Ihre Implementierung geben? – stiank81

+0

@ stiank81: Es gibt verschiedene Prism-Bits, die den "Common Service Locator" verwenden, um den von Ihnen verwendeten Container wegzuspalten. Ninject-Contrib hat eine Version für dich, aber du kannst diese auch von einem Kollegen verwenden, der es auf die neueste Version von Prism aktualisiert hat: http://sweux.com/blogs/pombeiro/index.php/2009/ 05/14/migrating-ninjectcontribcompositewpf-bootstrapper-to-prism-v2 / –