Отсутствует конструктор в классе, полученном из универсального класса - PullRequest
3 голосов
/ 03 августа 2010

Я пытаюсь создать универсальный репозиторий LINQ-TO-SQL на основе этого поста , который в основном позволяет вам определить универсальный базовый класс репозитория, а затем вы можете определить все свои действительные классы репозитория, выведя из общей базы.

Я хочу использовать репозиторий с передачей или без передачи в контексте данных, поэтому я решил создать два конструктора в базовом базовом классе:

  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
   }

Чтобы использовать его, я бы получил свой текущий класс хранилища:

public class TeamRepository : GenericRepository<Team, AppDataContext> { }

Теперь, если я попытаюсь использовать это с параметром:

AppDataContext db = new AppDataContext();
TeamRepository repos=new TeamRepository(db);

Я получаю ошибку: 'App.Models.TeamRepository' не содержит конструктор, который принимает 1 аргумент

Итак, похоже, что вы не можете наследовать конструкторы в C #, как бы вы это написали, чтобы я мог вызвать: TeamRepository () или TeamRepository (db)

Ответы [ 2 ]

6 голосов
/ 03 августа 2010

Производные классы не наследуют автоматически конструкторы какого-либо базового класса, вам необходимо явно их определить.

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

Обратите внимание, однако, что если базовый класс определяет (неявно или явно) доступный конструктор по умолчанию, конструкторы производного класса будут неявно вызывать его, если конструктор не вызывается явно.

1 голос
/ 03 августа 2010

Вы правы, конструкторы в C # не разбиты на подклассы.Вы должны будете объявить их самостоятельно.В вашем примере вам нужно будет создать два конструктора для каждого из ваших репозиториев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...