Unity:使RegisterInstance工作的实际需要是什么?

时间:2015-11-24 18:31:49

标签: c# inversion-of-control unity-container prism uwp

所以,我正在使用Prism和Prism.Unity来构建我的应用程序。但是,我遇到了一个我无法找到文档的问题。它可能是非常基本的,但错误消息不是那么有用,堆栈跟踪也无济于事。

所以,基本上,在注册现有对象的实例时,根据我发现的文档,我应该只是这样做:

interface IMyService { }
class EmailService : IMyService { }

我正在关注这封信,所讨论的类和接口目前都是空的,所以有点像这样:

Value cannot be null.
Parameter name: container

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

{{1}}

那么,这出错了什么?

1 个答案:

答案 0 :(得分:0)

好的,我确实找到了答案。基本上,在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);
}

现在它有效。正如我所说,基本的东西。该死。