如何动态实例化3个不同的类到相同的变量名,linq2sql c#



假设我的数据库中有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语句中编写相同的代码?

您可以创建一个这些类将实现的接口。然后使用

IRepository repository;
// your switch here
//switch() { case x: repository = new TypeRepository(); }
repository.GetItem(id);
repository.Save();

您也可以使存储库dynamic

dynamic repository;

类型将在运行时解析

为。getitem (id)和。save()创建一个父类(RepositoryBase),使用虚拟方法,从它继承,并在PeopleRepository, TaskRepository和projectresposititory的每个实现中重写这些方法。

另一个选择是创建一个接口(IRepository),这三个都可以使用。

相关内容

  • 没有找到相关文章