簡體   English   中英

Unity:使RegisterInstance工作實際上需要什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM