With the current design, since we have different subclasses, at some point we have to actually say `new ApplicationServiceProviderLinux` and `new ApplicationServiceProviderWindows` (for example). The Create function isolate this from the users of ApplicationServiceProvider.

In plain terms, we hide the ifdef from the users of ApplicationServiceProvider interface.