Caliburn IoC未初始化

时间:2014-10-02 18:46:02

标签: c# inversion-of-control windows-phone-8.1 caliburn.micro caliburn

我正在创建一个Windows Phone 8.1应用程序,其中一个功能是语音命令。流程是这样的:

  1. 我按下搜索按钮并说出命令“MyAppName do something”
  2. 在App.xaml.cs中,我有OnActivated函数,在那里我查看我的应用程序中哪个页面可以处理命令,然后我导航到该页面
  3. 如果在我发出命令时打开了应用程序,或者即使它在后台,那么一切正常。但是,如果应用程序完全关闭,当它被语音命令激活时,我会得到一个例外,说明IoC未初始化。在OnActivated函数中,我试图使用类似的东西进行导航:

    //IPageNavigationService is a wrapper for INavigationService from Caliburn
    var navigationService = IoC.Get<IPageNavigationService>(); 
    

    我也尝试使用以下方式导航:

    RootFrame.Navigate(typeof(MyView), args);
    

    但RootFrame为空。

    有没有办法手动初始化IoC for Caliburn?我注意到,如果应用程序是通过语音命令启动的,它就不会被初始化。

2 个答案:

答案 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);
}