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.cs
class定义一个static属性:
public static string DBPath;
在特定于平台的项目中分配如下路径:
App.DBPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "MyDatabase.db");
更新到 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.cs
class定义一个static属性:
public static string DBPath;
在特定于平台的项目中分配如下路径:
App.DBPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "MyDatabase.db");