MvvmCross 6.0:如何在初始化时将参数传递给 App?

MvvmCross 6.0: How to pass parameter to App on initialization?

更新到 MvvmCross 6.1.2 后,我的代码告诉我 App-class 必须有一个无参数构造函数。问题是,到目前为止,我使用它的构造函数将数据库的文件路径传递给了应用程序。

var dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "MyDatabase.db");
return new App(dbPath);

应该有办法做到这一点,但我还没有找到关于 MvvmCross 6.0 的信息。有人可以帮我吗?

方式一:

您可以使用 Mvx 注册将此路径导入核心,而不是将数据库路径传递到 App 构造函数。

public interface IDBPathService
{
    string GetDBPath();
}


public class  DBPathService : IDBPathService
{

    public string GetDBPath()
    {
         return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "MyDatabase.db");
    }
}

App.cs class 中会有 Initailize 方法应该使用

注册这个实现
CreatableTypes() 
    .EndingWith("Service")
    .AsInterfaces()
    .RegisterAsLazySingleton();

现在您可以使用

获取路径
var dbpath = Mvx.Resolve<IDBPathService>().GetDBPath();

方式二:

另一种更简单的方法是将静态 属性 带入您的 App.cs class 并直接从 Native 项目分配路径。

App.csclass定义一个static属性:

public static string DBPath;

在特定于平台的项目中分配如下路径:

App.DBPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "MyDatabase.db");