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>对象中。
如果您不仅想支持Users,而且还想支持Users的子类,那么可以将函数设为泛型:
public static class ExtensionMethods {

    public static TEntity DoMagicFunction<TEntity>(this Repository<TEntity> repository)
        where TEntity : User {
        // some magic
        return null; //or another TEntity
    }

}

07-24 19:10
查看更多