partial class Repository<TEntity> : IRepository<TEntity> where TEntity : class
{
}
我通用倉庫實現了TEntity
一組通用的方法,如C#:擴展通用類
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();
許多倉庫做了同樣的一套操作,所以它是有益的,但現在我想擴展Repository<User>
以支持一些額外的行爲。
partial class Repository<User> : IRepository<User>
{
public user DoMagicFunction()
{
}
}
,這樣我可以使用的存儲庫像
Repository<User>().DoMagicFunction();
我怎麼能延長相同的通用類有些Tentity
,而不是延長修改它的新的行爲。
我可以做同樣喜歡創建另一個UserRepository
以支持新的功能,但該訪問將成爲
UserRepository.DoMagicFunction();
,但我希望它像
Repository<User>().DoMagicFunction();
那豈不是更好地保持擴展通用以及和應該支持這個擴展的所有實體只是約束TEntity? –
@JanneMatikainen:那更新是關於什麼的:)但是我們可能使用'TUser'的setter,在這種情況下,這是行不通的。因此,不違反繼承原則並不總是可能的。 –
是的,但可能會將TUser更改爲TEntity。 –