【发布时间】:2013-11-21 19:33:54
【问题描述】:
我不确定我想做的事情是否可行,因为我在 google 上没有找到任何东西,经过大约 30 分钟的密集搜索后,我决定直接询问。
我已经为我的存储库定义了一个简单的接口
public interface IRepository<TEntity> : IDisposable
{
TEntity GetById(object id);
List<TEntity> GetAll();
}
现在我想实现我的第一个存储库,它的工作原理是这样的
public class ContentRepository : IRepository<ContentPages>
{
private readonly Context _db = new Context();
public ContentPages GetById(object id)
{
var result = _db.ContentPages.Find(id);
return result;
}
public List<ContentPages> GetAll()
{
return _db.ContentPages.ToList();
}
public void Dispose()
{
_db.Dispose();
}
}
这很好用,但是当我将存储库注入到我的 mvc 控制器时,它需要一个 IRepository<ContentPages> 作为参数类型,我只希望它采用一个 IRepository。
我试图像这样将泛型类型移动到函数本身
public interface IRepository : IDisposable
{
TEntity GetById<TEntity>(object id);
List<TEntity> GetAll<TEntity>();
}
}
当我这样做时,我不知道如何在实现中定义我的泛型类型TEntity
所以总而言之,我希望我在不指定类型的情况下使用接口,因此它可以像这样从实际对象中获取类型
public constructor1(IRepository ContentRepository){}
下一个控制器得到这个构造函数
public constructor2(IRepository BlogRepository){}
等等
我希望我能把我的问题描述得足够详细,让你们理解:)
【问题讨论】:
标签: c# generics interface implementation