partial class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
}
我的通用存储库为
public TEntity Get(int id)
{
return _context.Set<TEntity>()
.Find(id);
}
public TEntity Get(Expression<Func<TEntity, bool>> predicate)
{
return _context.Set<TEntity>()
}
我可以像
Repository<User>().Get();
许多存储库执行相同的操作集,因此这是有益的,但现在我想扩展
TEntity
以支持一些额外的行为。partial class Repository<User> : IRepository<User>
{
public user DoMagicFunction()
{
}
}
这样我就可以像
Repository<User>().DoMagicFunction();
如何为某些
Repository<User>
扩展相同的泛型类以扩展新行为,而不是修改它。我本可以创建另一个
Tentity
来支持新特性,但是访问器将UserRepository.DoMagicFunction();
但我希望它像
Repository<User>().DoMagicFunction();
最佳答案
可以使用扩展方法:
public static class ExtensionMethods {
public static User DoMagicFunction(this Repository<User> repository) {
// some magic
return null; //or another user
}
}
因此,这将以语法上良好的方式将函数添加到
Repository<User>
对象中。如果您不仅想支持
User
s,而且还想支持User
s的子类,那么可以将函数设为泛型:public static class ExtensionMethods {
public static TEntity DoMagicFunction<TEntity>(this Repository<TEntity> repository)
where TEntity : User {
// some magic
return null; //or another TEntity
}
}