坐在存储库模式之上,我为每个对象(即数据库表)提供了类,以允许基于类型的数据访问:
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>并显式实例化所有存储库.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。