Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Missing constructor in a class derrived from a generic class

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)

like image 954
PeteShack Avatar asked Sep 10 '26 16:09

PeteShack


1 Answers

Derived classes do not automatically inherit any base class's constructors, you need to explicitly define them.

public class TeamRepository : GenericRepository<Team, AppDataContext>
{
    public TeamRepository() : base() { }
    public TeamRepository(AppDataContext db) : base(db) { }
}

Do note however that if the base class defines (implicitly or explicitly) an accessible default constructor, constructors of the derived class will implicitly invoke it unless the constructor is invoked explicitly.

like image 128
Jeff Mercado Avatar answered Sep 13 '26 06:09

Jeff Mercado



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!