繁体   English   中英

如何解决Caliburn.Micro中的循环参考

[英]How solve circular reference in Caliburn.Micro

我正在Windows 8.1 Unversal(WinRT)项目上使用Caliburn.Micro v2.0.1。

我以Caliburn.Micro使用WinRT为例。

我的代码如下所示:

App.xaml.cs

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    Initialize();
    DisplayRootViewFor<LoginViewModel>();
}

protected override void PrepareViewFirst(Frame rootFrame)
{
    _container.RegisterNavigationService(rootFrame);
}

LoginViewModel.cs

public LoginViewModel(INavigationService navigationService, ...)
{
   ...
}

问题

OnLaunched调用OnLaunched

Initialize()配置WinRT容器。

  1. 所述DisplayRootViewFor<LoginViewModel>调用的实例LoginViewModel和因为的NavigationService尚未通过注册导致空异常PrepareViewFirst(Frame)
  2. PrepareViewFirst(Frame)尚未调用,它依赖于RootFrame配置的OnLaunched

因此, LoginViewModel依赖于RegisterNavigationServiceRegisterNavigationService依赖于DisplayRootViewFor<LoginViewModel>() ,后者依赖于LoginViewModel

有什么办法可以克服这个循环参考问题?

在解决Views之前,先在容器中注册服务-这样,所有依赖关系都可以在特定的依赖注入容器中使用,并且您可以使用ServiceLocator来查找它们。

通常,我总是在App.xaml.csOnStartup()方法中完成此操作。

您应该在组合根目录 (应用程序的最早访问点)上注册/配置容器。

这点取决于您拥有哪种应用程序:

等等

http://msdn.microsoft.com/zh-cn/magazine/hh148153.aspx上检查Windows 7生命周期 在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM