Prism View Navigation 在带有重音符号的注册名称上失败

Prism View Navigation fails on registration name with accent marks

当我使用一个带有重音符号的特定法语注册名称时,我的 Prism WPF 应用程序(Unity 容器)无法导航。我想弄清楚为什么以及我可以做些什么来解决它。

英文版使用了“Settings”这个词并且完美运行:

public void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.RegisterForNavigation<SettingsView>("Settings");
}

public void OnInitialized(IContainerProvider containerProvider)
{
    regionManager.RequestNavigate(RegionNames.ContentRegion, "Settings");  // THIS WORKS
}

法语版使用“Réglages”失败

public void RegisterTypes(IContainerRegistry containerRegistry)
{
    containerRegistry.RegisterForNavigation<SettingsView>("Réglages");
}
public void OnInitialized(IContainerProvider containerProvider)
{
    _regionManager.RequestNavigate(RegionNames.ContentRegion, "Réglages");  // FAILS
}

错误是 Prism.Unity.Shared/UnityContainerExtension.cs

中的异常
public object Resolve(Type type, string name, params (Type Type, object Instance)[] parameters)
{
    try
    {
        var c = _currentScope?.Container ?? Instance;

        // Unity will simply return a new object() for unregistered Views
        if (!c.IsRegistered(type, name))
            throw new KeyNotFoundException($"No registered type {type.Name} with the key {name}.");

调试器说它正在查找的名称是 R%C3%A9glages 而不是 Réglages

我要注意

Prism(不必要地)限制视图的名称能够强制导航到一个 uri,即使在像 wpf 这样的平台上它根本没有意义。所以你最好坚持使用普通的 ASCII 字符串来查看你的视图...

无论如何,为了公平起见,本地化内部常量是没有意义的。