Previously, I saw only one way View Models exchange data: through Light Messaging. I think I’m seeing a second way: through service-locating (
ServiceLocator). I regard service-locating as the imperative equivalent of the
Locator static resource used in XAML declarations. With this regard, it follows that
ServiceLocator is best for synchronous sharing of data (like getting a property value) and messaging is the choice for asynchronous sharing (service calls to the server).
ObjectExtensions class that I was previously using for a certain category of MVVM Light Messaging has its members completely replaced with
ServiceLocator routines (see pastebin.com code listing). In spite of the dangers of using static classes in certain automated testing scenarios, I currently prefer to use extension methods, handling
ServiceLocator routines. This preference confines references to
Microsoft.Practices.* in one area of the code base.