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
那么,这哪里出了问题?
好吧,我真的找到了答案。基本上,在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);
}
现在它起作用了。正如我所说,基本的东西。该死