因此,我正在为我的存储库实现创建一个通用提供程序,它将由BaseController(ASP.NET MVC 2)用于低级对象。这些对象具有共同的操作,例如“激活/停用/删除/编辑”,因此我将始终在每个对象上使用相同的属性。问题是,由于我不知道T是什么,所以我显然无法访问其属性。
因此,我的问题是,有人可以告诉我如何从对象中获取所需的属性。我见过一些人在谈论反射,其他人则在谈论表达树,但我都不知道该如何使用。
我确实有一个通用存储库,我相信它使用表达式树(从某些网站复制),但是同样,我不知道我在用它做什么...如果有帮助,这是到目前为止我所拥有的:
public class Provider<T> where T : class {
private readonly Repository<T> Repository = null;
public Provider(
Repository<T> Repository) {
this.Repository = Repository;
}
public void Activate(
int Id) {
T Entity = this.Repository.Select(Id);
// Need to get the property here, change it and move on...
this.Repository.Submit();
}
}
我对此表示感谢。
最佳答案
如果这些类具有共同的操作,听起来它们应该从相同的基类继承或实现相同的接口,对吗?如果是这样,请使用该接口/库作为T的约束
public class Provider<T> where T : ICommonInterface
然后,您将可以对接口或基类提供的共享成员进行编译时访问。