为了在.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);
}

10-08 07:25