Creating and using platform-specific services
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 are a couple of other platform-specific services our TripLog app could use to enrich its data and experience. In this section, we will create a location service that allows us to get specific geo-coordinates from the device. The actual platform...