Per ogni cosa che è diversa per i vari dispositivi devi scrivere delle interfacce.
Nella tua PCL fai delle chiamete a metodi i quali richiamano le funzioni di interfaccia e poi sarà in automatico il gestore a fare quella appropriata sencod in sistema in cui ti trovi.
Quello del path dove risiede il database è il caso di esempio specifico ma andando in uno strato superiore è proprio dove risiede la cartella della tua applicazione.
Ti avverto che una volta capito le interfacce ne farai gran uso nella tua applicazione Cross Platform ed è in sostanza quello che fa Xamarin.Form nella sua dll.
ESEMPIO di recupero APPLICATION PATH:
nella tua PCL fai una classe con una property statica ApplicationPath:
public static string ApplicationPath
{
get
{
return DependencyService.Get<Interfacce.ILocalFiles>().ApplicationPath("cartella-app");
}
}
In questo modo in qualsiasi momento nella tua PCL puoi sapere qual'è il percorso della tua applicazione.
Con DependencyService.Get ricghiami sempre un metodo di interfaccia.
Creazione Interfaccia:
sempre nella tua PCL ti fai una classe di tipo interfaccia:
public interface ILocalFiles
{
string ApplicationPath(string AppDir);
}
poi all'interno di ogni progetto specifico di piattaforma vai ad implementare l'interfaccia con il codice specifico:
Android:
[assembly: Dependency(typeof(Interfacce.LocalFiles))]
namespace Interfacce
{
public class LocalFiles:ILocalFiles
{
public string ApplicationPath(string AppDir)
{
var storage_path = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
return Path.Combine(storage_path, AppDir);
}
}
}
UWP:
[assembly: Dependency(typeof(Interfacce.LocalFiles))]
namespace Interfacce
{
public class LocalFiles : ILocalFiles
{
public string ApplicationPath(string AppDir)
{
var storage_path = ApplicationData.Current.RoamingFolder.Path;
return Path.Combine(storage_path, AppDir);
}
}
}
A questo punto poi passare all'instanza SqlLite il data base è semplice perchè ti basta combinare dal tuo PCL ApplicationPath con il nome del database che hai assegnato.