[英]Unity: What is actually needed to make RegisterInstance work?
因此,我正在使用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() this.InitializeComponent();
在仔細考慮了錯誤消息之后(並且看到錯誤消息來自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);
}
現在就可以了。 正如我所說的,基本的東西。 該死的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.