2012-04-16 82 views
0

下面是一些用于实例化WPF应用程序的ResourceManager的启动代码。如果我想通过xaml使这个可用,我会把它放在资源字典中吗?使用ObjectProvider?还有别的吗?实例化WPF对象并使它们可用

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

干杯,
Berryl

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

回答

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进行分配。