gpt4 book ai didi

windows-phone-7 - MVVM-light已经有一家工厂注册了INavigationService

转载 作者:行者123 更新时间:2023-12-04 03:21:36 26 4
gpt4 key购买 nike

我正在尝试将WP8项目从自制的MVVM实现调整为MVVM Light。

应用程序编译时没有错误,但是当我在Expression Blend中打开MainPage.xaml时,会出现以下错误:

类project.Services.INavigationService已被注册。 App.xaml

我的ViewModelLocator.cs:

    /// <summary>
/// Initializes a new instance of the ViewModelLocator class.
/// </summary>
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

if (ViewModelBase.IsInDesignModeStatic)
{

}
else
{
if (!SimpleIoc.Default.IsRegistered<INavigationService>())
{
SimpleIoc.Default.Register<INavigationService>(() => new NavigationService());
}
}

SimpleIoc.Default.Register<MainPage>();
SimpleIoc.Default.Register<SettingsEditViewModel>();
}

从您的代码注释中可以看到,我已经尝试了此处假定的修复程序,但在Blend中仍然遇到此错误。没有其他可以注册INavigationService的地方,那么可能是什么问题呢?

有任何想法吗? :)

最佳答案

我遇到了同样的问题,这似乎是与XAML-Designer,静态工厂/定位器和对象的设计时创建结合在一起的Visual Studio问题。但是:解决方案如下:

  • 没有工厂注册(不推荐)
    SimpleIoc.Default.Register<INavigationService>();
  • 或者如果您想使用工厂,请在注册工厂之前先注销
    SimpleIoc.Default.Unregister<INavigationService>();SimpleIoc.Default.Register<INavigationService>(() => new NavigationService());
  • 通过使构造函数静态化,防止设计者/混合创建ViewModelLocator多次
    static ViewModelLocator() { ... }

  • 错误很麻烦,但是可能会在这种情况下发生:您在设计时创建对象(可能是App.xaml中的 ViewModelLocator),并且每当更改代码中的某些内容时,都会触发编译器,并且无需重新注销即可重新创建ViewModelLocator服务。因此它将提示在工厂中已经被注册。从理论上讲,当多次注册没有工厂的类时,也应该有一个错误。

    关于windows-phone-7 - MVVM-light已经有一家工厂注册了INavigationService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17594058/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com