【问题标题】:WP 8.1 MVVM light cannot instantiate constructorWP 8.1 MVVM 灯无法实例化构造函数
【发布时间】:2016-06-15 08:44:27
【问题描述】:

我已经实现了导航服务和视图模型定位器。我可以正确地使用 OnNavigatedTo 打开我的页面。但是当页面初始化时,它并没有经过任何声明的构造函数。

我的定位器实现

INavigationService navigationService = new NavigationService();
navigationService.Configure("About", typeof(AboutPage));
return navigationService;

ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
INavigationService navigationService = CreateNavigationService();
SimpleIoc.Default.Register<INavigationService>(() => navigationService);
SimpleIoc.Default.Register<MainViewModel>();

我的页面上的构造函数

public MainViewModel(INavigationService navigationService)
{
    _navigationService = navigationService;  
}

有什么提示吗?

【问题讨论】:

  • 我想知道视图模型的实例是否甚至被注入到页面本身中?
  • 这对问题有何影响?
  • viewModel 是视图的依赖项。如果视图不以某种方式需要 viewModel(通常是构造函数依赖项),则 IoC 将永远不会实例化 viewModel 本身。我确实假设 viewModel 的构造函数是问题所在,正如您的问题所示。
  • 好的,我也得到了一个无参数构造函数,但没有改变结果。所以问题是:使用的是哪个构造函数?

标签: c# windows-phone-8 visual-studio-2015 mvvm-light


【解决方案1】:

您可以使用以下方法来检索导航服务,而不是将其作为构造函数的参数传递:

public MainViewModel()
{
    _navigationService = ServiceLocator.Current.GetInstance<INavigationService>();
}

注册的动作还没有创建任何实例;实例化是按需的。 您可以在这篇 MSDN 文章中找到有关 MVVM Light IOC 类的详细信息:

https://msdn.microsoft.com/fr-fr/magazine/jj991965.aspx

【讨论】:

    猜你喜欢
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2016-10-29
    • 2021-06-07
    相关资源
    最近更新 更多