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