Ich versuche, basierend auf diesem Beitrag ein generisches LINQ-TO-SQL-Repository zu erstellen, das es im Grunde ermöglicht, eine generische Basisklassen-Repository-Klasse zu definieren, und dann kannst du alle deine tatsächlichen Repository-Klassen definieren, indem du von der generischen Basisklasse abgeleitet wirst.
Ich möchte die Möglichkeit haben, ein Repository mit oder ohne Übergabe des Datenkontexts zu verwenden, deshalb habe ich beschlossen, zwei Konstruktoren in der generischen Basisklasse zu erstellen:
public abstract class GenericRepository
where T : class
where C : System.Data.Linq.DataContext, new()
{
public C _db;
public GenericRepository()
{
_db = new C();
}
public GenericRepository(C db)
{
_db = db;
}
public IQueryable FindAll()
... und andere Repository-Funktionen
}
Um es zu verwenden, würde ich meine tatsächliche Repository-Klasse ableiten:
public class TeamRepository : GenericRepository { }
Jetzt, wenn ich versuche, dies mit einem Parameter zu verwenden:
AppDataContext db = new AppDataContext();
TeamRepository repos=new TeamRepository(db);
erhalte ich den Fehler: 'App.Models.TeamRepository' enthält keinen Konstruktor, der 1 Argumente akzeptiert
Es scheint also, dass man in C# keine Konstruktoren vererben kann. Wie würdest du dies also kodieren, sodass ich sowohl TeamRepository() als auch TeamRepository(db) aufrufen kann?