Unity:使RegisterInstance工作所实际需要的内容

本文关键字:实际需要 工作 RegisterInstance Unity | 更新日期: 2023-09-27 18:24:14

所以,我正在使用Prism和Prism.Unity来构建我的应用程序。然而,我遇到了一个我找不到文档的问题。它可能很基本,但错误消息没有那么大帮助,堆栈跟踪也没有帮助。

所以,基本上,当注册一个现有对象的实例时,我应该简单地这样做,根据我找到的文档:

EmailService myEmailService = new EmailService();
myContainer.RegisterInstance<IMyService>(myEmailService);

我完全相信,有问题的类和接口目前是空的,所以有点像这样:

interface IMyService { }
class EmailService : IMyService { }

现在,当应用程序执行上面的命令时,它会在RegisterInstance()处抛出一个异常,并显示以下消息:

Value cannot be null.
Parameter name: container

那么,这哪里出了问题?

Unity:使RegisterInstance工作所实际需要的内容

好吧,我真的找到了答案。基本上,在this.InitializeComponent(); 之后,我已经将实例的注册填充到了App.App()例程(在UWP中被视为main()的等价程序)中

在对错误消息进行了更多的思考(并看到错误消息来自IEnumerable.Any(),所以像<null>.Any()这样的东西才是真正的来源)后,我心想:

如果InitializeComponent()还有东西要完成,而UnityContainer还没有完全构建好呢?

因此,我将注册推入OnLaunchApplicationAsync()例程,如下所示:

protected override Task OnLaunchApplicationAsync(LaunchActivatedEventArgs args)
{
    EmailService myEmailService = new EmailService();
    Container.RegisterInstance<IMyService>(myEmailService);
    NavigationService.Navigate("Main", null);
    return Task.FromResult(true);
}

现在它起作用了。正如我所说,基本的东西。该死