We already created a service in the preceding chapter to handle navigation. That custom navigation service specification was provided by an interface,
INavService, and there is a property of that interface type in the
BaseViewModel so that a concrete implementation of the service can be provided to the ViewModels as needed.
The benefit of using an interface to define platform-specific services is that it can be used in an agnostic way in the ViewModels and the concrete implementations can be provided via dependency injection. Those concrete implementations can be actual services, or even mocked services for unit testing the ViewModels, as we'll see in Chapter 8, Testing.
In addition to navigation, there ...