C# 如何在MvvmCross中传递特定于平台的字符串(路径)
我有一个数据库,可以根据平台存储在不同的地方。例如,对于Xamarin.Mac,数据库存储在@executable_path/./Resources/my.db中。现在ViewModel负责初始化数据库,我很乐意把它留在那里。然而,我需要通过一条路径,我所看到的是C# 如何在MvvmCross中传递特定于平台的字符串(路径),c#,mvvmcross,C#,Mvvmcross,我有一个数据库,可以根据平台存储在不同的地方。例如,对于Xamarin.Mac,数据库存储在@executable_path/./Resources/my.db中。现在ViewModel负责初始化数据库,我很乐意把它留在那里。然而,我需要通过一条路径,我所看到的是 var startup = Mvx.Resolve<IMvxAppStart>(); startup.Start (); var startup=Mvx.Resolve(); Start.Start(); 在AppDe
var startup = Mvx.Resolve<IMvxAppStart>();
startup.Start ();
var startup=Mvx.Resolve();
Start.Start();
在AppDelegate中。在Mvx中,我一直在使用RegisterSingleton和Resolve,但我不确定是否应该将其用于一个简单的字符串(是否应该使用IMyDbPath和MyDbPath接口和类?),以寻找一个优雅的解决方案。谢谢 如果您使用的是MvvmCross-SQLite-Net插件。注册后,无论是手动还是通过引导,您都可以解析两个接口:
ISQLiteConnectionFactory
或ISQLiteConnectionFactoryEx
解析ISQLiteConnectionFactory
时,可以调用Create(字符串地址)
将路径传递到数据库。您提供的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.db
或data/MyDatabase.db
,它应该为您解析基本路径
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);
}