为了在.NET Core中使用依赖项注入,我们为控制器构建了许多存储库接口,以用于数据库交互。
我们有一个EntityBase
类,其中包含一些方法,并且我们的通用存储库接口使用该基类,例如:IRepository<T> where T : EntityBase
。
我想添加一个更具体的TaggedEntityBase
类,该类扩展了EntityBase
以表示我们有一些要按标记过滤的实体的事实。我希望TaggedEntityBase
具有可以在控制器中使用的抽象属性,以便可以抽象出并重新使用过滤方法。
所以我想要的是这样的东西,但是我想我也想ITaggedRepository
也要从IRepository
继承,以便确保实现ITaggedRepository
的类具有ListAll
方法和ListWithTags
方法:
public class EntityBase { }
public abstract class TaggedEntityBase : EntityBase
{
public string TagIDs { get; }
}
public interface IRepository<T> where T : EntityBase
{
IEnumerable<T> ListAll();
}
public interface ITaggedRepository<T> where T : TaggedEntityBase
{
IEnumerable<T> ListWithTags(System.Linq.Expressions.Expression<Func<T, bool>> predicate);
}
我可以肯定地说,我只是通过追求这种思路彻底弄糊涂了自己,但是我不确定如何在这里做自己真正想要的事情。我知道我需要使事物抽象化以便进行依赖注入,但是我感觉自己正在支持接口所能提供的一切。
有没有更好的思路可以让我走到哪里?
最佳答案
您可以继续从IRepository<T>
继承:
public interface ITaggedRepository<T> : IRepository<T> where T : TaggedEntityBase
{
IEnumerable<T> ListWithTags(Expression<Func<T, bool>> predicate);
}