|
為了構(gòu)建一個(gè)輕量級(jí)的資源管理框架以滿足簡(jiǎn)單的本地化(Localization)的需求,我試圖直接對(duì)現(xiàn)有的Resource編程模型進(jìn)行擴(kuò)展。雖然最終沒(méi)能滿足我們的需求,但是這兩天也算對(duì).NET如何進(jìn)行資源的存取進(jìn)行了深入的學(xué)習(xí),所以將我對(duì)此的認(rèn)識(shí)通過(guò)博文的方式與諸位分享。在本篇文章中,我會(huì)通過(guò)自定義ResourceManager讓資源的存儲(chǔ)形式不僅僅局限于.ResX文件,你可以根據(jù)需要實(shí)現(xiàn)任意的存儲(chǔ)方式,比如結(jié)構(gòu)化的XML、數(shù)據(jù)庫(kù)表,甚至是通過(guò)遠(yuǎn)程訪問(wèn)獲取資源。(文中的例子從這里下載)
一、從添加資源文件說(shuō)起
二、ResourceManager、ResourceSet、ResourceReader與ResourceWriter
三、自定義BinaryResourceManager管理單獨(dú)二機(jī)制資源文件
一、從添加資源文件(.resx文件)說(shuō)起
說(shuō)起資源,你首先想到的肯定是通過(guò)VS添加的擴(kuò)展名為.resx的資源文件。在這個(gè)資源文件中,你不但可以添加單純的文本資源條目,也可以添加圖片、圖標(biāo)、文本文件以及其它類型文件。 不但如此,當(dāng)你在.resx文件中定義任意類型資源條目的時(shí)候,默認(rèn)定義的代碼生成器會(huì)為你生成對(duì)應(yīng)的托管代碼,使你可以采用強(qiáng)類型編程的方式獲取某個(gè)條目。
比如說(shuō),如果你在一個(gè)名稱為Resources.resx的資源文件中定義了如上圖所示的兩個(gè)字符串資源條目,默認(rèn)的代碼生成器或?yàn)槟闵扇缦碌拇a。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Demo.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
internal static string Greeting4Chris {
get {
return ResourceManager.GetString("Greeting4Chris", resourceCulture);
}
}
internal static string Greeting4NewYear {
get {
return ResourceManager.GetString("Greeting4NewYear", resourceCulture);
}
}
}
NET技術(shù):.NET的資源并不限于.resx文件,你可以采用任意存儲(chǔ)形式 [上篇],轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。