2012-04-06 10 views
1

So ist mir bewusst, dass der CommonServiceLocator ein Zwischenglied für den Austausch von verschiedenen IoC-Containern ist, aber mit Blick auf die MVVM Light Beispielcode, insbesondere der ViewModelLocator, scheint es interessant in dem Sinne, dassMVVM Light - Einfacher IoC + CommonServiceLocator? Versuchen Sie, den Zweck zu verstehen

Sie registrieren SimpleIoC als Standard-Locator, rufen aber gleichzeitig Register in der SimpleIoc-Standardinstanz auf.

Wenn Sie in Zukunft SimpleIoC ausreißen würden, bedeutet das nicht, dass Sie alle Registrierungsanrufe aktualisieren müssen?

Eine andere Frage ist, Burg Windsor in der Vergangenheit verwendet, und es ist die Unterstützung für das Laden von Typen durch die Konfiguration über die .config-Datei, wie würde es im Windows 8-Szenario funktionieren?

Ich versuche immer noch, das Szenario zu finden, wo die Verwendung von IoC jetzt sinnvoll ist?

Antwort

5

Die Common Service Locator-Implementierung garantiert, dass Sie die Getter-Aufrufe (GetInstance, GetAllInstances usw.) nicht ersetzen müssen, aber sie haben dort angehalten. Die Registrierung macht einen IOC-Container einzigartig. Zum Beispiel, wie Sie erwähnen, einige Support-Konfiguration mit Konfigurationsdateien (was SimpleIoc nicht tut). Wenn Sie also SimpleIoc durch einen anderen IOC-Container Ihrer Wahl ersetzen, ersetzen Sie normalerweise den Registrierungsteil. Beachten Sie, dass dies in der Regel in Ordnung ist, da diese Anrufe normalerweise an einem gemeinsamen Ort gruppiert sind, sodass sie ziemlich einfach zu ersetzen sind.

Für weitere Informationen, überprüfen Sie die http://commonservicelocator.codeplex.com/ Seite.

Beachten Sie, dass mein Ziel beim Hinzufügen von SimpleIoc zu MVVM Light nicht darin bestand, einen allmächtigen IOC-Container anzubieten. Tatsächlich verbeuge ich mich vor den bestehenden (Castle Windsor, StructureMap, Unity usw.). Stattdessen wollte ich eine einfache Implementierung bereitstellen, die unerfahrene Benutzer in die Welt der IOC-Container locken wird. Die Idee ist, dass sie, wenn sie erweiterte Funktionen benötigen, zu einer anderen, komplexeren Implementierung wechseln werden.

Hoffe das macht Sinn! Laurent

+0

Seit SimpleIoC ist [inspiriert] (http://geekswithblogs.net/lbugnion/archive/2011/04/14/mvvm-light-v4-preview-3-bl16-mix11-edition-mvvmlight.aspx) von [Simple Injector] (http://simpleinjector.codeplex.com), ich frage mich, warum haben Sie nicht einfach den Simple Injector (formal bekannt als Simple Service Locator) verwendet? – Steven

+0

Danke für die Antwort Laurent. Ich nehme an, dass ich tatsächlich angenommen habe, dass ich auch etwas falsch verstanden habe, also ist dieser einfache IoC einfach ein Typ-Container, der mit dem MS Common Service Locator verbunden ist, sogar Unterstützung für Konstruktor/Property-basierte Injektionen? –