I'm trying to create a generic LINQ-TO-SQL repository based on this post which basically lets you define a generic base repository class, then you can define all of your actual repository classes by deriving from the generic base.
I want the option of using a repository with or without passing in the data context, so I decided to create two constructors in the generic base class:
public abstract class GenericRepository<T, C>
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<T> FindAll()
... and other repository functions
}
To use it, I would derrive my actual repository class:
public class TeamRepository : GenericRepository<Team, AppDataContext> { }
Now, if I try to use this with a parameter:
AppDataContext db = new AppDataContext();
TeamRepository repos=new TeamRepository(db);
I get the error: 'App.Models.TeamRepository' does not contain a constructor that takes 1 arguments
So, it looks like you cant inherit constructors in C#, so, how would you code this so I can call: TeamRepository() or TeamRepository(db)