Il y a le DisplayAttribute qui a été ajouté dans la version 4.0 .NET qui vous permet de spécifier une chaîne de ressource:
[Display(Name = "UsernameField")]
string Username;
Si vous ne pouvez pas utiliser 4.0 .NET mais vous pouvez écrire votre propre attribut:
public class DisplayAttribute : DisplayNameAttribute
{
public DisplayAttribute(Type resourceManagerProvider, string resourceKey)
: base(LookupResource(resourceManagerProvider, resourceKey))
{
}
private static string LookupResource(Type resourceManagerProvider, string resourceKey)
{
var properties = resourceManagerProvider.GetProperties(
BindingFlags.Static | BindingFlags.NonPublic);
foreach (var staticProperty in properties)
{
if (staticProperty.PropertyType == typeof(ResourceManager))
{
var resourceManager = (ResourceManager)staticProperty
.GetValue(null, null);
return resourceManager.GetString(resourceKey);
}
}
return resourceKey;
}
}
que vous pouvez utiliser comme ceci:
[Display(typeof(Resources.Resource), "UsernameField"),
string Username { get; set; }
Cela ne permet pas d'utiliser * * fortement ** ressources typées. DisplayNameAttribute était un mauvais exemple, car il ne permet pas d'utiliser aussi faiblement typé :) Ma question ne concerne pas DisplayName ne permettant pas d'utiliser des ressources, car, comme vous avez répondu, cela peut être facilement géré. Ma question est de les utiliser ** fortement typés ** et non seulement avec cet attribut, mais avec chaque attribut dans DataAnnotations. – LukLed
Ceci devrait être la réponse acceptée à la question "Y a-t-il d'autres solutions?". La réponse acceptée actuellement est simplement "Non vous ne pouvez pas" –