我在构造函数中添加了对异步方法的调用,以便在加载时初始化ViewModel的数据。
但是我注意到在VM构造函数中调用该方法时出现了警告。它声明"this call is not awaited"
我从这个错误中理解,呼叫需要以await
为前缀。但这也意味着构造函数必须标记为async Task
我知道它不能在C#中。因为构造函数不能同步。
我确实在这里遇到了similar question,但是一些与我的实现相关的实用代码示例使用了依赖注入,这将是一种帮助。
有没有人有一个例子,如何重构构造函数的调用? 或者使用什么实现模式?
这是ViewModel的摘要版本,显示了我如何在构造函数中调用该方法:
namespace MongoDBApp.ViewModels
{
[ImplementPropertyChanged]
public class CustomerDetailsViewModel
{
private IDataService<CustomerModel> _customerDataService;
private IDataService<Country> _countryDataService;
public CustomerDetailsViewModel(IDataService<CustomerModel> customerDataService, IDataService<Country> countryDataService)
{
this._customerDataService = customerDataService;
this._countryDataService = countryDataService;
//warning about awaiting call, shown here...
GetAllCustomersAsync();
}
#region Properties
public ObservableCollection<CustomerModel> Customers { get; set; }
public ObservableCollection<Country> Countries { get; set; }
#endregion
#region methods
private async Task GetAllCustomersAsync()
{
var customerResult = await _customerDataService.GetAllAsync();
Customers = customerResult.ToObservableCollection();
var countryResult = await _countryDataService.GetAllAsync();
Countries = countryResult.ToObservableCollection();
}
#endregion
}
}