[英]How solve circular reference in Caliburn.Micro
我正在Windows 8.1 Unversal(WinRT)项目上使用Caliburn.Micro v2.0.1。
我的代码如下所示:
protected override void OnLaunched(LaunchActivatedEventArgs args)
{
Initialize();
DisplayRootViewFor<LoginViewModel>();
}
protected override void PrepareViewFirst(Frame rootFrame)
{
_container.RegisterNavigationService(rootFrame);
}
public LoginViewModel(INavigationService navigationService, ...)
{
...
}
OnLaunched
调用OnLaunched
。
Initialize()
配置WinRT容器。
DisplayRootViewFor<LoginViewModel>
调用的实例LoginViewModel
和因为的NavigationService尚未通过注册导致空异常PrepareViewFirst(Frame)
PrepareViewFirst(Frame)
尚未调用,它依赖于RootFrame
配置的OnLaunched
因此, LoginViewModel
依赖于RegisterNavigationService
而RegisterNavigationService
依赖于DisplayRootViewFor<LoginViewModel>()
,后者依赖于LoginViewModel
有什么办法可以克服这个循环参考问题?
在解决Views
之前,先在容器中注册服务-这样,所有依赖关系都可以在特定的依赖注入容器中使用,并且您可以使用ServiceLocator
来查找它们。
通常,我总是在App.xaml.cs
的OnStartup()
方法中完成此操作。
您应该在组合根目录 (应用程序的最早访问点)上注册/配置容器。
这点取决于您拥有哪种应用程序:
等等
在http://msdn.microsoft.com/zh-cn/magazine/hh148153.aspx上检查Windows 7生命周期
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.