具有异步形式工厂的简单注射器

时间:2016-06-17 03:10:23

标签: c# winforms asynchronous factory-pattern simple-injector

背景

我正在创建一个具有" 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;

1 个答案:

答案 0 :(得分:2)

尝试async Task<AccountManagementView> CreateAsync()更改为AccountManagementView CreateAsync()