下面是一些用于为WPF应用程序实例化ResourceManager的启动代码。如果我想通过xaml提供这个,我会把它放在资源字典中吗?使用ObjectProvider?还有别的吗?
是否有理由在WPF应用程序中更喜欢一种对象实例化方法而不是另一种方法?
干杯,
Berryl
var asm = Assembly.Load("SampleApp.Common");
var resourceMan = new ResourceManager("SampleApp.Common.Resources.SupportedCultures", asm);
DataContext = new MainWindowVm(resourceMan);
答案 0 :(得分: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
。