Hej, zdecydowałem się trochę podszkolić w WPF MVVM. A konkretnie klepać czyste MVVM bez dodatkowych bibliotek i frameworków, w celu zrozumienia go lepiej, poza IoC kontnerem (może zostawię go na koniec, póki co zostanę przy Autofac).

Akurat siedziałem nad luźnym wiązaniem przy otwieraniu nowego okna, gdzie należy też rozwiązać kontekst dla niego, i tknęło mnie, czy przypadkiem moje podejście jest poprawne?

A mianowicie korzystam w nim z ViewModelLocator.cs, w App.xaml określam VML jako zasób:

<Application.Resources>
        <vm:ViewModelLocator x:Key="ViewModelLocator"/>
    </Application.Resources>

Który jest wykorzystywany przy tworzeniu instancji okien, dla przykładu MainView.xaml:

<Window x:Class="Financial.Views.MainView"
        (...)
        DataContext="{Binding MainViewModel, Source={StaticResource ViewModelLocator}}">

Stąd też MainView.xaml wie, że ma brać zasoby, które są własnością VML. Aby pobrać tę własność, VML sięga do statycznego IContainer dostarczonego przez Autofac, który określa żywotność wszystkich zależności:

public class ViewModelLocator
    {
        private readonly IContainer _container;

        public ViewModelLocator()
        {
            _container = Startup.BootStrap();
        }

        public MainViewModel MainViewModel
        {
            get
            {
                return _container.Resolve<MainViewModel>();
            }
        }

        public SecondViewModel SecondViewModel
        {
            get
            {
                return _container.Resolve<SecondViewModel>();
            }
        }
    }

W tej książce autorzy piszą o niebezpieczeństwach związanych z Service Locator, ale wydaje mi się, że jeśli VML, ani IoC kontener nie są wołane przez modele widoków, zależności są wstrzykiwane przez konstruktory, to nie powinno być problemu?

Co o tym myślicie?