2011-10-13 49 views
1

我有一個項目有多個資源(resx)文件以及隨附的.designer.cs生成的文件。每個類都有一個類型爲System.Resources.ResourceManager的公共靜態屬性。使用Unity時,如何將名稱值解析爲靜態類屬性?

我似乎無法弄清楚的是如何獲得統一的配置,以便我可以解決它並執行。顯然,下面的代碼將不起作用 - 因爲它不會讓我以這種方式註冊對象。

public static string GetStringValue(name, tokenName) 
{ 
    using (IUnityContainer container = new UnityContainer()) 
    { 
     container.LoadConfiguration("ResourceManagers"); 
     var resolvedManager = container.Resolve<ResourceManager>(name); 
     return resolvedManager.GetString(tokenName); 
    } 
} 

並給予下述的配置...

<unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> 
    <assembly name="Web" /> 
    <container name="ResourceManagers"> 
     <register name="Manager1" mapTo="Web.Manager1Strings.ResourceManager" type="System.Resources.ResourceManager" /> 
    </container> 
    </unity> 

這裏是設計師的代碼 - 這是由CodeDOM的產生。

public class Manager1Strings 
{ 
    ... 
     [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 
     public static global::System.Resources.ResourceManager ResourceManager { 
      get { 
       if (object.ReferenceEquals(resourceMan, null)) { 
        global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Web.Resources.Manager1.Manager1Strings", typeof(Manager1Strings).Assembly); 
        resourceMan = temp; 
       } 
       return resourceMan; 
      } 
     } 
    ... 
} 
+1

附註:創建並在每次調用向GetStringValue配置新的容器將是非常** **昂貴。解決方案是線程安全的,因此您可以創建和配置容器一次。 – TrueWill

回答

0

好吧,我能解決這個問題,但因爲我有過設計文件(CodeDom中)的發電控制它而已。

總結:

  1. 我創建其具有1種方法 「的GetString」
  2. 我調整了的CodeDOM邏輯(similar to this),以實現該接口的接口。
  3. 當時我能夠通過統一來解決接口的實例