下面是一些启动代码,用于实例化 WPF 应用程序的 ResourceManager。如果我希望通过 xaml 提供它,我会把它放在资源字典中吗?使用 ObjectProvider?别的?
是否有理由在 WPF 应用中首选一种对象实例化方法而不是另一种方法?
干杯
贝瑞尔
var asm = Assembly.Load("SampleApp.Common");
var resourceMan = new ResourceManager("SampleApp.Common.Resources.SupportedCultures", asm);
DataContext = new MainWindowVm(resourceMan);
在我看来,如果你不需要在应用程序生命周期内替换字典,静态类是最好的解决方案:
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}">
例如,如果存在多线程环境,则应使用 Interlocked.CompareExchange
分配_Manager
。