partial class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
}
Run Code Online (Sandbox Code Playgroud)
我的通用仓库实施一套共同的方法,TEntity像
public TEntity Get(int id)
{
return _context.Set<TEntity>()
.Find(id);
}
public TEntity Get(Expression<Func<TEntity, bool>> predicate)
{
return _context.Set<TEntity>()
}
Run Code Online (Sandbox Code Playgroud)
我可以访问
Repository<User>().Get();
Run Code Online (Sandbox Code Playgroud)
许多存储库执行相同的操作集,因此它是有益的,但现在我想扩展Repository<User>以支持一些额外的行为.
partial class Repository<User> : IRepository<User>
{
public user DoMagicFunction()
{
}
}
Run Code Online (Sandbox Code Playgroud)
所以我可以像使用存储库一样
Repository<User>().DoMagicFunction();
Run Code Online (Sandbox Code Playgroud)
如何为Some扩展相同的泛型类Tentity以扩展新行为而不是修改它.
我本可以做同样的事情,比如创建另一个UserRepository来支持新功能,但访问者会变成
UserRepository.DoMagicFunction();
Run Code Online (Sandbox Code Playgroud)
但我希望它像
Repository<User>().DoMagicFunction();
Run Code Online (Sandbox Code Playgroud)
您可以使用扩展方法:
public static class ExtensionMethods {
public static User DoMagicFunction(this Repository<User> repository) {
// some magic
return null; //or another user
}
}Run Code Online (Sandbox Code Playgroud)
因此,这将以语法上很好的方式添加函数到Repository<User>对象.
如果你想支持它不仅为UserS,但对于的子类User小号为好,可以使功能通用:
public static class ExtensionMethods {
public static TEntity DoMagicFunction<TEntity>(this Repository<TEntity> repository)
where TEntity : User {
// some magic
return null; //or another TEntity
}
}Run Code Online (Sandbox Code Playgroud)