Wie übergibt man Variablen an eine generische Funktion?


Frage

Wenn ich meine Entitäten zuerst über Entity Framework Database erzeuge , möchte ich eine Funktion wie diese verwenden:

AuditManager.DefaultConfiguration.Exclude<T>();

in Anbetracht dessen, dass die Anzahl der Male, die ich es nennen möchte, gleich der Anzahl der Entitäten sein sollte

Ex:

AuditManager.DefaultConfiguration.Exclude<T>();

Nun, wie man eine ausgewählte Anzahl von Entitäten durchläuft und jeden an die Exclude Funktion Exclude ?

Akzeptierte Antwort

Die naheliegende Lösung wäre, die Methode für jeden Entitätstyp aufzurufen, den Sie verstecken möchten. So was:

AuditManager.DefaultConfiguration.Exclude<Employee>();
AuditManager.DefaultConfiguration.Exclude<Department>();
AuditManager.DefaultConfiguration.Exclude<Room>();

Sie können bedingte Anweisungen ( if ) hinzufügen, um sie dynamisch auszuführen.

Wenn Sie jedoch eine vollständig flexible Lösung wünschen, bei der Sie die Exclude Methode basierend auf Metadaten aufrufen, benötigen Sie etwas anderes. Etwas wie das:

AuditManager.DefaultConfiguration.Exclude<Employee>();
AuditManager.DefaultConfiguration.Exclude<Department>();
AuditManager.DefaultConfiguration.Exclude<Room>();

Dies setzt voraus, dass die Exclude<T> -Methode eine Instanzmethode ist, auf welche Instanz DefaultConfiguration verweist.


Beliebte Antwort

Eine Alternative zum Durchlaufen Ihrer Entitätstypen besteht darin, dass die Entitäten, die nicht überwacht werden sollen, dieselbe Schnittstelle implementieren und diese ausschließen. Beispielsweise:

public interface IExcludeFromAudit
{ }

Und deine Entitäten:

public interface IExcludeFromAudit
{ }

Und jetzt einfach die Schnittstelle ausschließen:

public interface IExcludeFromAudit
{ }

Der Vorteil ist, dass es jetzt einfach ist zu kontrollieren, welche davon ausgeschlossen sind.





Lizenziert unter: CC-BY-SA
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum