0

下面是一些为 WPF 应用程序实例化 ResourceManager 的启动代码。如果我想通过 xaml 提供它,我会把它放在资源字典中吗?使用对象提供者?还有什么?

是否有理由在 WPF 应用程序中更喜欢一种对象实例化方法而不是另一种方法?

干杯,
贝里尔

var asm = Assembly.Load("SampleApp.Common");
var resourceMan = new ResourceManager("SampleApp.Common.Resources.SupportedCultures", asm);
DataContext = new MainWindowVm(resourceMan);
4

1 回答 1

1

在我看来,如果您在应用程序生命周期内不需要替换字典,那么静态类是最好的解决方案:

public static class SampleAppCommonResources
{
    private static ResourceManager _Manager;

    public static ResourceManager Manager
    {
        get
        {
            if (_Manager == null)
            {
                var asm = Assembly.Load("SampleApp.Common");
                _Manager = new ResourceManager("SampleApp.Common.Resources.SupportedCultures", asm);
            }

            return _Manager;
        }
    }
}

XAML 用法:

<Menu Tag="{x:Static local:SampleAppCommonResources.Manager}">

如果有多线程环境,_Manager应该分配使用Interlocked.CompareExchange例如。

于 2012-04-16T20:10:03.027 回答