C# 视图中的异步依赖项注入
我正在尝试使用存储库模式来管理WPF应用程序中的服务访问 因此,基本上我计划使用Ninject将我的Singleton ServiceManager注入到每个需要它的视图中 我构建了ServiceManager,因此每个方法调用都是异步的C# 视图中的异步依赖项注入,c#,wpf,asynchronous,dependency-injection,view,C#,Wpf,Asynchronous,Dependency Injection,View,我正在尝试使用存储库模式来管理WPF应用程序中的服务访问 因此,基本上我计划使用Ninject将我的Singleton ServiceManager注入到每个需要它的视图中 我构建了ServiceManager,因此每个方法调用都是异步的 public partial class OffersView : UserControl { public OffersView(ISvcManager svcManager) { InitializeComponent()
public partial class OffersView : UserControl
{
public OffersView(ISvcManager svcManager)
{
InitializeComponent();
Offers.ItemsSource = await svcManager.GetLatestOffers();
}
}
现在我遇到了一个难题。我正在创建一个包含DataGrid的视图,该视图由一个缓慢的、非同步的方法填充。目前我在构造函数中有调用,但我显然不能使构造函数异步
public partial class OffersView : UserControl
{
public OffersView(ISvcManager svcManager)
{
InitializeComponent();
Offers.ItemsSource = await svcManager.GetLatestOffers();
}
}
我可以想出几种方法来解决这个问题,例如我可以将接口分为快速方法和慢速方法,并且只对慢速方法使用异步,而同步快速方法是在构造函数中调用的方法。但不确定这是否是最好的使用方法——在哪里调用长时间运行的方法来填充datagrid
或者,我在其中放置一个Wait(),并仅在完成后设置ItemSource。我真的不喜欢那种方法
那么我应该如何设置这个呢?使用异步事件处理程序,比如
Loaded
,它将允许异步调用
比如说
public partial class OffersView : UserControl {
private readonly ISvcManager svcManager;
public OffersView(ISvcManager svcManager) {
this.svcManager = svcManager;
InitializeComponent();
Loaded += onLoaded;
}
private async void onLoaded(Object sender, RoutedEventArgs e) {
Loaded -= onLoaded; // Unsubscribe to prevent repeated firing.
Offers.ItemsSource = await svcManager.GetLatestOffers();
}
}