Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在MvvmCross中传递特定于平台的字符串(路径)_C#_Mvvmcross - Fatal编程技术网

C# 如何在MvvmCross中传递特定于平台的字符串(路径)

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

我有一个数据库,可以根据平台存储在不同的地方。例如,对于Xamarin.Mac,数据库存储在@executable_path/./Resources/my.db中。现在ViewModel负责初始化数据库,我很乐意把它留在那里。然而,我需要通过一条路径,我所看到的是

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);
        }