我有這樣一個類:抽象掉在靜態方法在非靜態類類型
public class LocalizedDataAnnotationsModelMetadataProvider : DataAnnotationsModelMetadataProvider
{
protected override ModelMetadata CreateMetadata(IEnumerable<Attribute> attributes, Type containerType,
Func<object> modelAccessor, Type modelType, string propertyName)
{
var meta = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName);
if (string.IsNullOrWhiteSpace(propertyName))
return meta;
if (meta.DisplayName == null)
GetLocalizedDisplayName(meta, propertyName);
if (string.IsNullOrWhiteSpace(meta.DisplayName))
{
string resource = string.Format("{0}_{1}", meta.ContainerType.Name, meta.PropertyName).ToLower();
meta.DisplayName = string.Format("[{0}]", resource);
}
return meta;
}
private static void GetLocalizedDisplayName(ModelMetadata meta, string propertyName)
{
ResourceManager rm = new ResourceManager(typeof (i18n));
CultureInfo culture = Thread.CurrentThread.CurrentUICulture;
string resource = string.Format("{0}_{1}", meta.ContainerType.Name, meta.PropertyName).ToLower();
meta.DisplayName = rm.GetString(resource, culture);
}
}
我想抽象掉了線
ResourceManager rm = new ResourceManager(typeof (i18n));
我想使這個類型i18n
的類indenpendent。我希望能夠指定施工/初始化資源管理器的類型,使類更具有普遍性和把它放在一個獨立的類庫。
我有什麼選擇?可以將其與靜態類做或做我必須有非靜態類?或者,我可以只留下事情是這樣的,抽象rm
爲類字段並在構造函數初始化呢?
謝謝
UPDATE:請注意,類將最有可能在不同的ASP.NET MVC站點使用中的global.asax.cs這樣的:
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
ModelMetadataProviders.Current = new LocalizedDataAnnotationsModelMetadataProvider();
}
我從來沒有實際引用或直接使用這個類,ASP.NET MVC將一切盡在掌握之中。
這是否有過簡單地對用指定的(假設'資源類型和資源名稱模特屬性'DisplayAttribute'聲明DisplayAttribute'正常工作,您正在使用的框架有什麼好處(例如,它在MVC3中工作正常,但不是MVC2)) –
巨大的優勢,因爲它允許我們完全跳過DisplayAttribute,並默認使用此ModelData提供程序來提供資源字符串 - 我發現編寫屬性非常耗時,尤其是與對資源名稱的引用。這是完美的工作,現在我只想使它更通用 – mare