c# – 如何从通用存储库或数据库表中检索对象,其中包含表名的字符串和记录索引的int

坐在存储库模式之上,我为每个对象(即数据库表)提供了类,以允许基于类型的数据访问:

public abstract class ObjectDataAccessBase<T> : IObjectDataAccess<T>
{
    public virtual IQueryable<T> FindAll()
    {
        ...
    }
    public virtual T Get(int? id)
    {
        ...
    }
    public virtual void Add(T obj)
    {
        ...
    }
    public virtual void Delete(T obj)
    {
        ...
    }
}

该片段涵盖了界面,这是我见过的常见模式.所以从应用程序的另一个地方,我所拥有的是对象名称的字符串(即db表或“T”),以及表示我想要的对象索引的int,我想要传递给“Get(int?id)”以返回有问题的对象.但是我需要先实例化正确的类,然后进行渲染,以便公开我需要的方法.我也需要施放物体.

问题是:在这种情况下可以实现吗?如果是这样,怎么样?

(关于调用的上下文的更多细节:我有一个表将一种对象与可能的许多其他对象相关联,所以我在这个表中有一个列为’表名’为DB表的列,一个’int id’为表中对象的索引,我希望能够从表中检索对象,使用这两个信息正确地进行转换.只是用这种模式测试水域,我已经想知道它是否值得…)

谢谢你的帮助.

蒂姆.

最佳答案 使用Reflection创建存储库的实例:

var type = Type.GetType("ObjectDataAccessBase");
type = type.MakeGenericType(Type.GetType("Your T as string"));
var repository = Activator.CreateInstance(type);

var method = type.GetMethod("Get");
var result = method.Invoke(repository, new object[]{ id });

我写的没有VS,所以可能有一两个错误.但希望上面的内容能让你开始.

如果您将大量使用字符串,我建议您创建一个静态字典< string,IObjectDataAccess>并显式实例化所有存储库.

点赞