当我尝试运行我的UWP项目时出现以下错误:
MvvmCross.Platform.Exceptions.MvxIoCResolveException:'失败 解析类型参数工厂的参数 创建时的IMvxSqliteConnectionFactory DebtBuddy.Core.Repositories.AccountRepository'
我的android项目运行没有问题。以下是我的存储库类。
public class AccountRepository : IAccountRepository
{
private readonly SQLiteConnection _connection;
public AccountRepository(IMvxSqliteConnectionFactory factory)
{
_connection = factory.GetConnection("Account.db");
_connection.CreateTable<Account>();
}
public async Task<List<Account>> GetAllAccounts()
{
return await Task.FromResult(_connection.Table<Account>().ToList());
}
public async Task Insert(Account account)
{
await Task.Run(() => _connection.Insert(account));
}
public async void Update(Account account)
{
await Task.FromResult(_connection.Update(account));
}
public async void Delete(int id)
{
await Task.FromResult(_connection.Delete(id));
}
}
答案 0 :(得分:3)
你应该放弃使用它,因为不推荐使用MvvmCross SQLite插件。我还建议使用SQLiteAsyncConnection
包装Task
内的所有操作,类似于您在此处所做的操作。
目前首选的SQLite包名为sqlite-net-pcl
,可在NuGet和GitHub上使用。此版本的库支持Android Nougat及更高版本,并在最新版本中以.Net Standard为目标。
MvvmCross SQLite包装器只是SQLite的一个较小的包装器。您可以自己轻松地重现MvvmCross SQLite插件。这是一个这样的例子:
将此界面放入PCL / .Net Standard&#34; Core&#34;项目:
public interface ISqliteConnectionService
{
SQLiteAsyncConnection GetAsyncConnection();
}
然后为每个平台实现接口。以下是Android的外观。对不起,我手头没有UWP示例。
public class AndroidSqliteConnectionService : ISqliteConnectionService
{
private const string FileName = "File.sqlite3";
private SQLiteAsyncConnection _connection;
public SQLiteAsyncConnection GetAsyncConnection()
{
if (_connection == null)
{
var databaseFolder = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var databaseFilePath = Path.Combine(databaseFolder, FileName);
_connection = new SQLiteAsyncConnection(databaseFilePath);
}
return _connection;
}
}
然后在每个平台的Setup.cs
中注册实现:
protected override void InitializeFirstChance()
{
Mvx.LazyConstructAndRegisterSingleton<ISqliteConnectionService, AndroidSqliteConnectionService>();
}
现在,您可以使用构造函数依赖注入与您的PCL / .Net Standard&#34; Core&#34;内的ViewModel,存储库等共享ISqliteConnectionService
。项目
答案 1 :(得分:0)
您是否还记得将MvvmCross SQLite包添加到您的UWP项目中?由于这两个平台都支持该插件,因此最有可能的原因是您的项目失败并且正在另一个平台上工作。
另外,请注意MvvmCross SQLite插件是deprecated,应该避免使用。