Si je génère mes entités via Entity Framework Database First , et que je souhaite utiliser une fonction comme celle-ci:
AuditManager.DefaultConfiguration.Exclude<T>();
considérant que le nombre de fois que je veux l'appeler devrait être égal au nombre d'entités
ex:
AuditManager.DefaultConfiguration.Exclude<Employee>();
AuditManager.DefaultConfiguration.Exclude<Department>();
AuditManager.DefaultConfiguration.Exclude<Room>();
Maintenant, comment parcourir le nombre d’entités sélectionnées et les transmettre à la fonction Exclude
?
La solution évidente serait d'appeler la méthode pour chaque type d'entité que vous souhaitez masquer. Comme ça:
AuditManager.DefaultConfiguration.Exclude<Employee>();
AuditManager.DefaultConfiguration.Exclude<Department>();
AuditManager.DefaultConfiguration.Exclude<Room>();
Vous pouvez ajouter des instructions conditionnelles ( if
s) autour d'eux pour le faire de manière dynamique.
Cependant, si vous souhaitez une solution totalement flexible, dans laquelle vous appelez la méthode Exclude
basée sur des métadonnées, vous avez besoin de quelque chose d'autre. Quelque chose comme ça:
var types = new[] { typeof(Employee), typeof(Department), typeof(Room) };
var instance = AuditManager.DefaultConfiguration;
var openGenericMethod = instance.GetType().GetMethod("Exclude");
foreach (var @type in types)
{
var closedGenericMethod = openGenericMethod.MakeGenericMethod(@type);
closedGenericMethod.Invoke(instance, null);
}
Cela suppose que la méthode Exclude<T>
est une méthode d'instance, quelle que soit l'instance sur laquelle pointe DefaultConfiguration
.
Une alternative à la boucle dans vos types d'entité est de faire en sorte que les entités que vous ne voulez pas auditer implémentent la même interface et l'excluent. Par exemple:
public interface IExcludeFromAudit
{ }
Et vos entités:
public class Order : IExcludeFromAudit
{
//snip
}
Et maintenant, excluez simplement l'interface:
AuditManager.DefaultConfiguration.Exclude<IExcludeFromAudit>();
L'avantage de ceci est qu'il est maintenant facile de contrôler ceux qui sont exclus.