2014-03-25 33 views
0

我有一個數據庫可以存儲在不同的地方,具體取決於平臺。例如,對於Xamarin.Mac,數據庫存儲在@executable_path /../ Resources/my.db中。現在ViewModel處理初始化數據庫,我很樂意把它留在那裏。不過,我需要通過它的路徑,我看到的全部是如何在MvvmCross中傳遞特定於平臺的字符串(路徑)

var startup = Mvx.Resolve<IMvxAppStart>(); 
startup.Start(); 

在AppDelegate中。在Mvx中,我一直在使用RegisterSingleton和Resolve,但我不確定我應該如何使用它作爲簡單的字符串(我應該有IMyDbPath和MyDbPath接口和類嗎?)尋找一個優雅的解決方案。謝謝!

回答

1

如果您使用的是MvvmCross-SQLite-Net插件。一旦它的註冊,手動或通過引導程序將有兩個接口可以解決:

ISQLiteConnectionFactoryISQLiteConnectionFactoryEx

當你解決ISQLiteConnectionFactory你就可以調用Create(string address)傳遞路徑到數據庫。您給Create的路徑不是平臺特定的,這意味着,Create將爲您找出特定於平臺的基本路徑。

private ISQLiteConnection CreateFileDb(SQLiteConnectionOptions options) 
     { 
      if (string.IsNullOrWhiteSpace(options.Address)) 
       throw new ArgumentException(Properties.Resources.CreateFileDbInvalidAddress); 
      var path = options.BasePath ?? GetDefaultBasePath(); 
      string filePath = LocalPathCombine(path, options.Address); 
      return CreateSQLiteConnection(filePath, options.StoreDateTimeAsTicks); 
     } 

所以,你可以通過支持的平臺上MyDatabase.dbdata/MyDatabase.db,它應該解決的基本路徑爲您服務。

相關問題