Je travaille sur la création d'une application patrimoniale avec ASP.NET Dynamic Data. Les modèles, comme d'habitude, sont tous en lecture seule et on peut définir le nom d'affichage ou la description par le biais d'attributs.
Cela fonctionnait bien, mais maintenant je suis dans une situation où je dois interroger deux sources différentes (fichier de ressources et une autre source) pour le nom d'affichage.
Le code précédent était propre, car nous ne faisions qu'interroger les ressources :
[Display(ResourceType = typeof(Resources.m_Res), Name = M_RES_MIMETYPE_ID, Description = M_RES_MIMETYPE_ID_DESCR)]
C'était très bien et cela a fonctionné comme prévu. Cependant, je dois maintenant obtenir le nom d'affichage et la description d'abord à partir d'un autre fichier et si tout le reste échoue, je dois me rabattre sur les ressources
J'ai dû créer deux attributs personnalisés différents, quelque chose de cette manière :
public class MGADisplayName : DisplayNameAttribute
{
private readonly string propertyName;
public string Name { get; set; }
public Type TableName { get; set; }
public Type ResourceType { get; set; }
public MGADisplayName([CallerMemberName] string PropertyName = null)
{
propertyName = PropertyName;
}
public override string DisplayName
{
get
{
var key = (TableName.Name + : + (propertyName ?? Name)).ToLower();
if (/* SOME QUERYING */)
{
return QUERY[key];
}
else
{
string property = Resources.m_Res.ResourceManager.GetString(Name);
if (property != null)
{
return property;
}
else
{
return Name;
}
}
}
}
}
Ce genre de travail fonctionne et je suppose que c'est bon pour l'instant, mais le prochain numéro est pour bientôt : Je vais devoir faire la même chose avec Display.GroupName.
Maintenant, pour autant que je sache, il n'y a pas de GroupNameAttribute à étendre, donc je suis un peu dans le noir là.
J'aimerais pouvoir étendre l'attribut DisplayAttribute, ce serait EXACTEMENT ce dont j'ai besoin, mais la classe est scellée, donc c'est une impasse.
J'aimerais pouvoir changer le modèle à la volée et fournir DisplayName et Description par le biais de setters, mais le modèle n'a que des getters, donc c'est une autre impasse.
Je suis à court d'options ici. Que peut-on faire d'autre ici ?