2012-04-15 6 views
2

ich lerne, wie das Prism-Navigation API verwenden, und es erfordert die Registrierung Ihrer Views (oder ViewModels bei Verwendung von Viewmodel-first) mit dem Behälter Einheit auf folgende Weise:Prism Navigation: Wo kann man View/ViewModels mit UnityContainer registrieren?

Container.RegisterType<object, HomeView>("HomeView"); 

this blog post See und die MSDN Documentation. Die Beispiele, die ich gesehen habe, haben diese Typen in der Klasse Bootstrapper über die ConfigureContainer()-Methode registriert. Einige Beispiele registrieren Typen in den Klassen Module. Meine Frage ist: spielt es eine Rolle, wo Sie diese Typen mit dem Container registrieren?

Mein Bauchgefühl ist, dass die Registrierung in der BootstrapperConfigureContainer() Methode wird die registrierten Typen zur Verfügung zu allen Modules während Registrierung in den Module Klassen machen diese Typen nur in diesen Module registriert bedeuten werden.

Antwort

4

Kurze Antwort: Nein, es stimmt nicht, wo Sie sich registrieren.

Es wäre nur logisch, Instanzen in der Bibliothek zu registrieren, in der sie existieren. Einigkeit ist auch ein bisschen anders.

Beispiel 1: Nehmen wir an, Sie haben ModuleA und ModuleB und Sie hätten eine Schnittstelle in der Infrastruktur. Sie registrieren diese Schnittstelle für eine Implementierung in ModuleA. Sie lösen diese Instanz dann in moduleB auf. Es würde funktionieren, weil Sie es in moduleA konfiguriert haben. Wenn Sie nicht haben, dann ist Beispiel 2 für Sie.

Beispiel 2: Nehmen wir an, Sie haben einen nicht registrierten Typ von ClassA. Sie haben dies nicht in bootstrapper oder module konfiguriert und rufen eine Lösung für diese Klasse auf. Unity macht das automatisch für Sie und löst es auf und es löst sogar Abhängigkeiten, wenn er sie finden kann. Es könnte eine Ausnahme geben. Ich bin mir nicht sicher über Schnittstellen, ich glaube, wenn es nicht zu einer konkreten Implementierung registriert ist, kann es nicht gelöst werden.

+0

Danke! Gute Antwort. Das ist, was ich dachte, würde passieren. –