[Example 5 - Introducing testing, SimpleIoC and domain model interaction]

Our goal for this example, is to demonstrate some simple testing of the view model, and demonstrate how the view model can interact with the domain model, and communicate that information to the view.  Our domain model for this example consists of a single service - the PalindromeEvaluationService.  We inject an instance of the service into the view model using SimpleIoc - the default, bare-bones IoC container that comes with MvvmLight Toolkit.

We now have 4 projects in the solution:
* MvvmPalindrome - the executable project
* DomainModel - a project containing our domain concerns
* TestMvvmPalindrome - a unit test project for testing the application and presentation concerns
* TestDomainModel - a unit test project for testing the domain concerns.

MainViewModel.cs:
 * Note how we are using "Constructor Injection" to get an instance of the domain service, and that we are requesting the service via interface - not by concrete implementation.
 * Note that now that the command implementation is a bit more complicated, we have put the implementation in a named method, and now have the RelayCommand referencing that method.
 * Note how the command implementation now interacts with the domain model, and transforms its result into something suitable for the view to display.

ViewModelLocator.cs:
 * Note how we register the *interface* with SimpleIoC, and tell it how to create the concrete implementation.
 * Note that no modification was needed for the MainViewModel registration - SimpleIoc was able to figure out on its own that MainViewModel needed an IPalindromeEvaluationService instance.

CheckIfInputIsAPalindrome.cs:
 * This is our test class that contains the unit tests for our "CheckIfInputIsAPalindromeCommand" in the MainViewModel.
 * Note how for the test, we are able to inject a test double for the PalindromeEvaluationService - that is we can test the command in isolation from the actual palindrome service implementation. We can do this because the MainViewModel depends on the interface, not the implementaiton.
 * Note that there are two aspects of commands that need testing - whether CanExecute() returns the correct value, and whether the Execution of the command actually does the right thing.

Now if we run the application, the user input is actually evaluated to see if it is a plaindrome.