背景
我正在创建一个具有" AccountManagementView"的Winforms应用程序。形成。每次创建表单时,都会在执行长任务后立即执行。我的目标是首先创建表单,然后使用户可以在执行长任务时与表单进行交互。
解决方案(目前为止)
到目前为止,我的策略是将表单的构造函数设为私有,而是使用异步工厂方法来创建表单。创建表单后,工厂方法然后启动长任务。
public partial class AccountManagementView : Form, IAccountManagementView
{
private AccountManagementView()
{
InitializeComponent();
}
public static async Task<AccountManagementView> CreateAsync()
{
AccountManagementView view = new AccountManagementView();
await view.LongTask();
return view;
}
private async Task LongTask()
{
await Task.Delay(5000);
this.lblTitle.Text = "Account Management - Loaded";
}
}
问题
如何使用IoC容器Simple Injector注册此工厂?我试图通过以下方式注册表单:
container.RegisterSingleton<AccountManagementView>(AccountManagementView.CreateAsync());
通过该尝试,我收到以下错误消息:&#34;无法转换为&#39; System.Threading.Tasks.Task&#39; to&#39; Dispatch.UI.Windows.Views.Account.AccountManagementView&#39;&#34;
答案 0 :(得分:2)
尝试async Task<AccountManagementView> CreateAsync()
更改为AccountManagementView CreateAsync()