2012-03-26 6 views
0

Kann ich UnityContainer in Views Codebehind verwenden, wenn ich ein gutes MVVM-Programm schreiben möchte?Kann ich UnityCOntainer im Codehind von View verwenden? (MVVM)

this.DataContext = uc.Resolve<MainViewModel>(); 
+0

Ja, Sie können. Gibt es hier eine tiefere Frage? Hast du es versucht und einen Fehler bekommen? Fragen Sie nach Best Practices? – cadrell0

+0

das war alles, was ich jetzt wissen möchte :) Aber wenn Sie bereits hier sind, was ist die beste Vorgehensweise, um DataContext anzuzeigen? – Arvangen

Antwort

1

ServiceLocator ist ein Anti-Pattern, das Sie nicht verwenden sollten. Der Grund dafür ist, dass Objekte jederzeit in einer Klasse aufgelöst werden können. Dadurch wird die Nützlichkeit Ihrer DI verringert und der Code für Unit-Tests schwieriger.

mein Vorschlag wäre eine der folgenden zu tun:

a) Injizieren Sie die Viewmodel in die Ansicht durch Konstruktor. Beheben Sie die Ansicht mithilfe von Unity, sodass alle Sichtenabhängigkeiten (das Anzeigemodell) für Sie aufgelöst werden.

So:

public partial class Ausblick: Usercontrol, IViewFoo { Öffentlichkeit (IViewModel Ansichtsmodell) { Datacontext = Ansichtsmodell; }

var view = _container.Resolve(); }

b)

eine angeschlossene Eigenschaft Verwenden Sie das Ansichtsmodell in die Datacontext für Sie zu injizieren. MEFEDMVVM und beide MVVMLite tun, um diesen (schauen sie auf Codeplex up)

c) eine Konvention basierten Ansatz zu folgen, wo das Viewmodel auf die basierte Ansicht zugewiesen wird auf sie kompatibel Namen mit (MainView.cs und MainViewModel.cs). Caliburn Micro macht das und ist sehr schön zu bedienen. Dies kann auch auf CodePlex gefunden werden.

+0

sehr hilfreich, thx! – Arvangen

2

Wenn Sie fragen, ob Sie können, ja.

Wenn Sie fragen, ob Sie sollten, ist die Antwort immer noch ja.

+0

Während ich zustimme, würde ich empfehlen, den ServiceLocator so zu verwenden, dass Sie den Container nicht überall hin mitnehmen müssen. – cadrell0

+0

Sicherlich wäre der beste Weg, die Konstruktorinjektion zu verwenden, da die Ansicht nicht wirklich auf den Einheitscontainer im MVVM-Muster verweisen sollte. –

Verwandte Themen