Generische Interface-Vererbung und Implementierung Klasse für die Repository-Muster
Ich habe ein wenig gelesen über Zwänge und versuche es zu implementieren, in meinem repository-pattern.
Ich möchte etwas wie die unten, kann aber nicht Recht bekommen es zu kompilieren.
public interface IRepository<T>
{
void GetAllData<T>();
}
//This needs to inherit from IRepository
//T has to be a model class
//V has to be a class that implements IEmployeeRepo
public interface IEmployeeRepo<T, V> where V : EmployeeRepo where T : class : IRepository<T>
{
void DoSomethingEmployeeRelated();
}
//Dont think this inheritance is correct
public class EmployeeRepo<Employee, this> : IEmployeeRepo
{
}
//My example model class
public class Employee
{
public string Name {get;set;}
}
Es gibt viel zu viele Fehler in deinem code (ich kann den spot 3 zumindest), um zu verstehen, was Sie wollen.
Lesen Sie die Hinweise oben IEmployeeRepo und auch erwähnte ich das es nicht kompilieren
Lesen Sie die Hinweise oben IEmployeeRepo und auch erwähnte ich das es nicht kompilieren
InformationsquelleAutor Jon | 2011-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, warum Sie zwei Typ-Parameter für das Repository - was ist der Punkt?
*Hier ist das klassische Beispiel für eine .NET Repository mit Generics: *
*Erste, der Repository-Schnittstelle: *
*Zweite, die Generische Repository-Implementierung (EF als Beispiel): *
*Dann, das Spezifische Repository (Sie sollten eine pro Aggregat root, und auch eine Schnittstelle für jede spezifische repository-Details-spezifische Methoden): *
Verwendung:
Gehen nicht auf die Suche gehen zu verrückt mit Generika - das einzige, das Sie brauchen, ist zum begrenzen der Repository für die Verwendung durch eine Person, die ist gekapselt hinter dem Repository.
Ich einfach verwenden
where T : class
.Anderen verwenden
where T : IDomainAggregate
oder ähnliches, um die Einschränkungen, die auf den tatsächlichen Typ der Entität, was erlaubt ist.es schrieb mich. Der code ist ähnlich, was ich verwenden.
+1 für domain-Aggregate.
InformationsquelleAutor RPM1984
In dieser situation normalerweise habe ich eine base-repo-Klasse, die IRepository<> und eingegeben wird, um eine Basis-Model-Klasse.
InformationsquelleAutor TimC
Versuchen Sie dieses;
InformationsquelleAutor Rob