无法访问存储库基类方法

时间:2011-05-05 22:58:24

标签: c# inheritance repository-pattern structuremap

在我的特定存储库类(例如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();
  }
}

我正在使用structuremap配置CollectionRepository,不确定这是否正确:

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

1 个答案:

答案 0 :(得分:1)

您可以为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继承自实现BaseRepository接口的IBaseRepository,所以您已满足要求,现在可以调用基类方法。