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

时间:2018-06-22 14:31:37

标签: c# xamarin initialization mvvmcross

在更新到MvvmCross 6.1.2之后,我的代码告诉我App类必须具有无参数构造函数。问题是直到现在,我仍使用它的构造函数将文件路径传递给数据库到应用程序。

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

应该有一种方法可以执行此操作,但是我还没有找到有关MvvmCross 6.0的信息。有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

方法1:

您可以使用Mvx注册,而不是将数据库路径传递给App构造函数,而将其传递给Core。

public interface IDBPathService
{
    string GetDBPath();
}


public class  DBPathService : IDBPathService
{

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

App.cs类中,应该使用Initailize方法来注册该实现,

CreatableTypes() 
    .EndingWith("Service")
    .AsInterfaces()
    .RegisterAsLazySingleton();

现在您可以使用

var dbpath = Mvx.Resolve<IDBPathService>().GetDBPath();

方法2:

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

App.cs类中定义一个静态属性:

public static string DBPath;

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

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