我們有一個類似的問題,雖然沒有與城堡。我們使用的解決方案是簡單地定義一個從另一個派生而來的新屬性,它使用常量字符串作爲資源管理器的查找,如果找不到任何字符串,則會返回到該字符串本身。
[AttributeUsage(AttributeTargets.Class
| AttributeTargets.Method
| AttributeTargets.Property
| AttributeTargets.Event)]
public class LocalizedIdentifierAttribute : ... {
public LocalizedIdentifierAttribute(Type provider, string key)
: base(...) {
foreach (PropertyInfo p in provider.GetProperties(
BindingFlags.Static | BindingFlags.NonPublic)) {
if (p.PropertyType == typeof(System.Resources.ResourceManager)) {
ResourceManager m = (ResourceManager) p.GetValue(null, null);
// We found the key; use the value.
return m.GetString(key);
}
}
// We didn't find the key; use the key as the value.
return key;
}
}
用法是一樣的東西:
[LocalizedIdentifierAttribute(typeof(Resource), "Entities.FruitBasket")]
class FruitBasket {
// ...
}
然後每個特定地區的資源文件可以定義自己的Entities.FruitBasket
項,根據需要。
謝謝,那真是太好了,但我使用的Castle Validator的ValidateNonEmptyAttribute版本沒有這些屬性。我只看到errorMessage,RunWhen,ExecutionOrder和FriendlyName。 – Marek 2010-01-23 15:13:41
哪個版本的Castle驗證器具有這些屬性?你可以發佈一個下載鏈接嗎? – Marek 2010-01-23 15:18:25
有點棘手,但SVN版本有它。 https://svn.castleproject.org/svn/castle/Components/Validator/trunk/感謝您指出這一點! – Marek 2010-01-23 15:26:55