无法访问存储库基类方法

本文关键字:基类 类方法 存储 访问 | 更新日期: 2023-09-27 17:55:35

在我的特定存储库类中,例如CollectionRepository,我继承了通用基类(BaseRepository),并在构造函数中使用应该注入的基本UnitOfWork。但是,我无法访问任何BaseRepository继承的方法。

完全没有想法,任何帮助将不胜感激。

这里有一些代码来说明我的问题:

我的控制器,其中注入了存储库。

public readonly ICollectionRepository _collectionRepository;
public HomeController(ICollectionRepository collectionRepository, IRepository<Collection> repository)
{
  _collectionRepository = collectionRepository;
}
public ActionResult Index()
{
  _collectionRepository. //Here i only get the ICollectionRepositoryMethods
  return View(new List<Note>());
}

我的基本仓库:

public class BaseRepository<T> : IRepository<T> where T : IAggregateRoot
{
  public readonly IUnitOfWork _unitOfWork;
  public BaseRepository(IUnitOfWork unitOfWork)
  {
    _unitOfWork = unitOfWork; 
  } 
  public BaseRepository()
  {}
  public void Save(T Entity)
  {
    _unitOfWork.Session.Save(Entity);
  }
}

这里是继承基础的特定存储库类。

public class CollectionRepository : BaseRepository<Collection>, ICollectionRepository
{
  public CollectionRepository(IUnitOfWork unitOfWork) : base(unitOfWork)
  {
  }
  public IList<Collection> GetTodaysCollections()
  {
    throw new System.NotImplementedException();
  }
}

我正在使用结构图像这样配置CollectionRepository,不确定这是否正确:

For<ICollectionRepository>().Use<CollectionRepository>();

无法访问存储库基类方法

您可以为 ICollectionRepository 实现的 BaseRepository 引入一个接口。

这将让任何处理ICollectionRepository的人都知道BaseRepository方法。

public interface IBaseRepository<T>
{
    void Save(T Entity);
}

BaseRepository实现了:

public class BaseRepository<T> : IBaseRepository<T>, IRepository<T> where T : IAggregateRoot

现在,当ICollectionRepository实现该接口时,所有类依次实现ICollectionRepository也实现IBaseRepository

public ICollectionRepository<T> : IBaseRepository<T>
{
    //ICollectionRepository methods go here...
}

由于CollectionRepository继承自实现IBaseRepository接口的BaseRepository,因此您已经满足要求,现在可以调用基类方法。