Как динамически создать 3 разных класса в одном и том же имени переменной, linq2sql c # - PullRequest
0 голосов
/ 03 мая 2011

Скажем, у меня есть 3 таблицы в моей базе данных: люди, задачи и проекты

Скажем, у меня есть 3 класса для репозитория: PeopleRepository, TaskRepository и ProjectRepository.

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

Очевидно, я мог бы просто написать множество кода для каждой таблицы, но я бы предпочел свести код к минимуму. У меня уже есть отражение, работающее нормально для различных имен столбцов, которые могут быть переданы методу, но я не могу заставить такой код работать.

switch (tableName)
            {

                case "people":
                    var repository = new PeopleRepository();
                    break;
                case "tasks":
                    var repository = new TaskRepository();
                    break;
                case "projects":
                    var repository = new ProjectRepository();
                    break;
             }

//Modify respective database table
repository.getItem(id); //etc
repository.Save(); //etc

Я пробовал еще несколько подобных вещей, но ни одна из них, похоже, не работала. Изменение области, в которой определяется переменная и т. Д.

Я чувствую, что у c # должно быть что-то хорошее, чтобы справиться с этим, это так? Или мне нужно писать один и тот же код в каждом операторе switch?

Ответы [ 2 ]

2 голосов
/ 03 мая 2011

Вы можете создать интерфейс, который будут реализованы этими классами.Затем используйте

IRepository repository;

// your switch here
//switch() { case x: repository = new TypeRepository(); }

repository.GetItem(id);
repository.Save();

Вы также можете создать репозиторий dynamic

dynamic repository;

И тип будет разрешен во время выполнения.

1 голос
/ 03 мая 2011

Создайте родительский класс (RepositoryBase) с виртуальными методами для .getItem (id) и .Save (), наследуйте от него и переопределите эти методы в каждой реализации для PeopleRepository, TaskRepository и ProjectRespository.

Другой вариант - создать интерфейс (IRepository), который могут использовать все три.

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