我正在创建一个Windows Phone 8.1应用程序,其中一个功能是语音命令。流程是这样的:
OnActivated
函数,在那里我查看我的应用程序中哪个页面可以处理命令,然后我导航到该页面如果在我发出命令时打开了应用程序,或者即使它在后台,那么一切正常。但是,如果应用程序完全关闭,当它被语音命令激活时,我会得到一个例外,说明IoC未初始化。在OnActivated函数中,我试图使用类似的东西进行导航:
//IPageNavigationService is a wrapper for INavigationService from Caliburn
var navigationService = IoC.Get<IPageNavigationService>();
我也尝试使用以下方式导航:
RootFrame.Navigate(typeof(MyView), args);
但RootFrame为空。
有没有办法手动初始化IoC for Caliburn?我注意到,如果应用程序是通过语音命令启动的,它就不会被初始化。
答案 0 :(得分:1)
protected override async void OnActivated(IActivatedEventArgs args)
{
if ( args.Kind == ActivationKind.VoiceCommand )
{
Initialize();
PrepareApplication();
PrepareViewFirst();
var service = IoC.Get<IService>();
DisplayRootView(typeof(MyView));
}
}
我通过手动初始化Caliburn.Micro解决了这个问题。您可以阅读更多详细信息here
答案 1 :(得分:0)
由于非Silverlight应用程序更像是通常为INAVigationService配置WinRT;
private static INavigationService _navservice; // declared at top of class
protected override void Configure(){
//viewmodel inclusions into container here...
PrepareViewFirst();
}
protected override void PrepareViewFirst(Frame rootFrame)
{
_navservice = container.RegisterNavigationService(rootFrame);
}